2012-11-09 6 views
2

두 사람이 같은 이름을 가질 수 있지만 별도의 ID가있는 테이블이 있습니다. 나는 그 이름을 받았고 신분증을 요구할 필요가있다. 나는 같은 명령을 사용하면배열로 여러 행 선택

: 나는 명령 줄 (psql를)에서이 명령을 사용하는 경우

SELECT id_num INTO cust_id FROM Customers WHERE name=CName; 

를, 그것은 (예를 들어)이 개 결과를 반환합니다.

그러나 SQL 스크립트 (PL/pgSQL)의 일부로 사용하면 항상 첫 번째 인스턴스 만 가져옵니다.

cust_id[]으로 선택을 시도했지만 오류가 발생했습니다. 그렇다면 모든 결과를 선택하고 배열이나 다른 쉬운 방법으로 펌프를 사용하는 적절한 방법은 무엇입니까? 당신은 PostgreSQL의 문서 9.1에서 루프 사용을

DECLARE id_num bigint; 

FOR id_num in select cust_id from Customers WHERE name = CName LOOP 
    your code here 
END LOOP; 

읽기 plpgsql 제어 구조를 선호하는 경우

+0

다시는 plpgsql에서 사용 배열의 예입니다 http://stackoverflow.com/questions/11731481/pl-pgsql-select-into-an-array – sufleR

+0

배열에 대한 대안은 루프 일 수 있습니까? '다음'결과 가져 오기를 지정하는 방법이 있습니까? – user974703

답변

6

에서이

id_nums := ARRAY(select cust_id from Customers WHERE name = CName); 

선택

DECLARE id_nums bigint[]; 

을 선언합니다.array_agg()

id_nums := (SELECT array_agg(cust_id) FROM customers WHERE name = cname); 

DECLARE id_nums int[]; -- assuming cust_id is of type int 

id_nums := ARRAY (SELECT cust_id FROM customers WHERE name = cname); 

또는 집계 함수 또는 할당 ::

에 대한 SELECT INTO를 사용
+0

루프 버전과 관련하여 좀 더 설명 할 수 있습니까? id_num은 내 자신의 변수이고 cust_id는 Customers의 열입니다. '배열 값은 "{"또는 치수 정보로 시작해야합니다. 컨텍스트는 FOR select 문을 가리 킵니다. – user974703

+0

수정 된 답변입니다. 쿼리 결과를 ARRAY에 할당합니까? – sufleR

+0

퍼펙트, 그게 내가 배열로 id_nums를 delcared 문제였습니다. 철저하고 읽기 쉬운 응답에 감사드립니다! – user974703

3

array constructor를 사용하여 배열로 개별 행의 데이터를 넣으려면
SELECT INTO id_nums 
     ARRAY (SELECT cust_id FROM customers WHERE name = cname);