이 QnA 게시판에는 cursor 부분에 관한 설명이 거의 없어서
상당히 애먹었습니다. 보시고 잘 활용하셨으면 합니다.
postgresql 7.2 이상에서만 작동하는 것으로 암니다.
프로시져에서 거의 대부분이 1개의 인자만 return 이 가능합니다.
하지만,실무에선 2개 이상의 값을 리턴받고 싶은 경우가 대부분이죠.
이것을 가능하게 하는 방법은 cursor을 이용하는 겁니다.
**************
테이블 만들기
create table test( name1 varchar(10), name2 varchar(10) );
insert into test values('12345','abcdef');
**************
프로시져 만들기
CREATE or replace FUNCTION "sp_test1"("refcursor", "varchar", "varchar") RETURNS refcursor AS '
declare
tmp_2 ALIAS for $2;
tmp_3 ALIAS for $3;
BEGIN
OPEN $1 FOR SELECT * from test;
RETURN $1;
END;
' LANGUAGE 'plpgsql';
**************
실행하기
BEGIN;
select sp_test1('test_cur','aaa','bbb'); /* 공동망 송신 시작*/
FETCH ALL IN test_cur;
COMMIT;
****************************
설명을 하자면,
우선 프로시져에서의 리턴값은 row 는 1개이고, column은 2개 이상입니다.
테이블을 그렇게 만들었습니다.
그리고 프로시져에서 1개의 인자는 커서의 동적 이름이고, 나머지 2개는 그냥 활용하시라고 입력값을 2개로 준겁니다.
실행시 transaction 처리를 해야 합니다. fetch 를 잘 보시면,
입력 cursor 명을 사용함을 알 수 있습니다.
pgadmin2 에서 확인하니 psql 과는 조금 다른 결과를 냅니다.
psql 에선 2개의 select, fetch 각각 메시지를 줍니다.
pgadmin2 에서 fetch의 메시지(실제 관심있는 메시지)만 보여줍니다.
실무에서 pg을 활용하려니 에로 사항이 많습니다.
회사 프로젝트 관계로 사용하는데,,,,보고 그래도 따라해서 되는 것은 install 외에는 거의 없습니다. T.T
담에는 procedure 관련 좀 더 자세한 노하우(?)을 올리겠습니다.
상용이 아니라서 그런지, oracle , ms-sql 에 비해 불편하고, 성능이 부족한게 한 두가지가 아닙니다. 솔직히요...
|