2012-03-13 5 views
8

작성시 Array_append을 사용하여 저 구문 오류를 범 코드PostgreSQL의 함수

CREATE OR REPLACE FUNCTION primes (IN integer) RETURNS TEXT AS $$ 
DECLARE 
    counter INTEGER = $1; 
    primes int []; 
    mycount int; 
    BEGIN 
    WHILE counter != 0 LOOP 
     mycount := count(primes); 
     array_append(primes [counter], mycount); 
     counter := counter - 1; 
    END LOOP; 
    RETURN array_to_text(primes[], ','); 
    END; 
$$ 
LANGUAGE 'plpgsql' 

이 나 소수 생성 함수의 시작을 개발하고있다. 단순히 배열의 '개수'를 반환하도록 가져 오려고합니다. 따라서 함수에 '7'을 전달하면 [0, 1, 2, 3, 4, 5, 6]으로 돌아 가야합니다. 나는이 기능을 만들려고 할 때

는하지만 내가 포스트 그레스의 기능 안돼서

SQL Error: ERROR: syntax error at or near "array_append" LINE 1: array_append($1 [ $2 ], $3) 
     ^QUERY: array_append($1 [ $2 ], $3) CONTEXT: SQL statement in PL/PgSQL function "primes" near line 8 

를 얻을. 왜 내가이 어레이를 제대로 작동시키지 못할지 이해하지 못합니다.

또 다시 원하는 것은 배열의 '현재'개수로이 배열을 정확하게 채우는 것입니다. (실제로 루프를 올바르게 수행하고 정확하게 계산하고 있음을 이해하는 데 더 많은 도움이됩니다.)

도움 주셔서 감사합니다. fine manual에서

+0

왜 프라임을 생성하기 위해 데이터베이스를 사용하고 있습니까?!? –

+0

나는 PL/SQL을 배우기 위해이 일을하고 있다고 가정한다 - 나는이 질문에있어서 SO가 더 적절한 장소라고 생각한다. – MikeyB

+0

예 배우기 위해 이것을하고 있습니다. – StanM

답변

13

:

기능 : array_append(anyarray, anyelement)
반환 유형 : anyarray
설명 : 배열의 끝

그래서 array_append에 요소를 추가 ar을 반환합니다. ray와 그 반환 값을 무언가에 할당해야합니다. 또한 을 기능 마지막에 넣고 싶습니다. array_to_text이 아닙니다. primes은 배열이므로 primes의 항목에 추가하려고 시도하지 않고 array_append(primes, mycount)을 원합니다.

CREATE OR REPLACE FUNCTION primes (IN integer) RETURNS TEXT AS $$ 
DECLARE 
    counter INTEGER = $1; 
    primes int []; 
    mycount int; 
BEGIN 
    WHILE counter != 0 LOOP 
     mycount := count(primes); 
     primes := array_append(primes, mycount); 
     counter := counter - 1; 
    END LOOP; 
    RETURN array_to_string(primes, ','); 
END; 
$$ LANGUAGE 'plpgsql'; 

나는 당신이 할 mycount := count(primes);을하려는 모르겠어요, 아마 당신은 당신이 primes에 연속 정수의 순서를 얻을 것이다 그래야 mycount := array_length(primes, 1); 말을 의미했다.

+0

굉장합니다. 고맙습니다. 제 문제였습니다. 그리고 네 array_length 찾고 있었어 - SQL 프로그래밍 구문을 배우려고 노력하고있어. 완전히 새로운 세상입니다. – StanM

+0

@StanQA : 시퀀스를 생성하려면 [generate_series'] (http://www.postgresql.org/docs/current/static/functions-srf.html#FUNCTIONS-SRF-SERIES)를 참조하십시오. 루프보다는 집합/테이블의 관점에서 생각해야하지만, 어쨌든 SQL에 접근해야합니다. –