database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 4178 게시물 읽기
No. 4178
프로시져에서 2개 이상의 column 되돌리기
작성자
배재한(turbobae)
작성일
2002-05-02 19:04
조회수
1,997

이 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 에 비해 불편하고, 성능이 부족한게 한 두가지가 아닙니다. 솔직히요...

이 글에 대한 댓글이 총 2건 있습니다.

배재한님 결국은 고난의 길로 접어 들기 시작했군요.

실제로 말씀 하신대로 상용 DBMS 와는 아직 비교할 만한 단계는 아니라고 생각합니다. 제공되는 부가적인 utility 들도 상당히 많이 불편합니다.

 

그러나 아직은 사용자들에게 많은 여지를 남겨 두고 있는 DBMS 라는 생각을 많이 가지고 있습니다.

 

그리고 깊이 들어가다 보면 상용에서 느끼지 못하는 여러가지를 느끼게 만듭니다. 매니아적인 기질이 있는 사람에게는 좋을 듯... -.-;

 

참 그리고 이런 팁들은 tutorial 정도의 메뉴에 올려 주시면 여러사람들에게 도움이 될 것으로 생각됩니다.

 

좋은 글 감사 드립니다.

정재익(advance)님이 2002-05-03 00:05에 작성한 댓글입니다.

분명 오라클의 plsql 놈과는 비교도 안될 정도로 기능이 미흡하다는 것은 맞습니다. 하지만, 그것은 RDBM 그 자체의 문제인듯싶습니다. 오라클의 패키지 형태로 제공하는 그 무엇이 없다는 것이지요.

 

하지만, 조금만 더 관심을 가져보시면, 프로시져 언어의 확장이 아주 자유롭습니다. 예를 들어 plpython 같은 놈이라면, db client 측은 오직 입출력만 맡고 나머지는 모두 이놈이 다 처리할 수 있을 만큼 그 기능이 무한합니다.

 

PostgreSQL의 프로시져 랭귀지는 정말 재밌습니다. 그 가능성이 무한합니다. :)

김상기(ioseph)님이 2002-05-03 01:05에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4181error ?
정경일
2002-05-04
1122
4180[질문]postgresql은 win32 버전은 없는지..? [1]
goodlife
2002-05-03
1193
4179훔... 우째 이런 일이... 디비박살???
차재승
2002-05-02
1192
4178프로시져에서 2개 이상의 column 되돌리기 [2]
배재한
2002-05-02
1997
4174일정시간이 지나면 백업하는방법
superkhs
2002-04-30
1100
4175┕>Re: 일정시간이 지나면 백업하는방법
정재익
2002-05-01 10:54:09
1448
4173두 날짜 사이의 일수를 알수 있을까요? [2]
이성준
2002-04-30
1753
4170의도하는대로 안되네요 [1]
손재면
2002-04-29
1181
4177┕>Re: 의도하는대로 안되네요
김상기
2002-05-02 18:39:28
1140
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다