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 3191 게시물 읽기
No. 3191
Re: PL/pgSQL 관련 질문입니다..
작성자
김일형
작성일
2001-07-26 12:38
조회수
2,281

안녕하세요, 김일형입니다.

 

제가 다른 분들께 도움을 드리고자 PL/pgSQL을 번역해서 올린 죄(?)로 이에 대한 답변을 많이 올리는데요.... 사실 저도 그에 대한 번역과 간단한 테스트 프로그램을 짜본 정도이지 전문가는 아닙니다.

 

제가 드릴 수 있는 답변은 그저 메뉴얼 수준의 원론적인 내용에 국한 될 것같습니다.

 

일단 제가 PL/pgSQL에 대한 메뉴얼을 번역해서 올린 것이 있는데 이 싸이트의 초기 화변에서 공지사항 104. PostgreSQL 에서 PL/pgSQL 의 사용방법 (메뉴얼) 을 참조를 하십시요.

 

질문 1) PL/pgSQL 에서는 Cursor(Oracle,PL/SQL처럼) 처리기능은 없는가요??

 

제가 아는 바로는 커서라는 개념은 없습니다만, 다른 개념(방법)으로 구현을 해놓은 것이 있습니다. 해당 메뉴얼의 "24.2.7. RECORD 와 작업"을 참조하십시요. 예제도 있습니다.

 

질문 2) 위 예제 while 중간에 insert 처리를 하는데 중간에 에러 발생시

임의에 처리를 할수 있는 방법은 없습니까?

 

있습니다. "24.2.5.4. 다른 결과 상태 포함하기"를 참조하십시요. 예문을 없지만 앞뒤를 읽어보시면 코드를 만들 수 있으실 것입니다.

 

그외 예외처리나 로그로 출려하는 방법에 대한 방법에 대한 것은 "24.2.8. 작업중단과 메세지"와 "24.2.9. 예외"를 참조해 주십시요.

 

질문 3) 예러 발생시 ROLLBACK 처리를 하는 방법

모든 처리가 완료시 COMMIT 처리 방법은 따로 없는가요?

트랜잭션 관리를 위한...

 

이에 대한 경험이 없어서 뭐라 말씀을 드리기가 그런데요... 만일 예외상황을 발생시킨다면 ("RAISE EXCEPTION"을 이용하여) 트랜젝션을 중단한다는 말이 메뉴얼에 나오기는 합니다.

 

 

 

물론 PL/pgSQL은 PL/SQL에 비하여 몇가지 기능이 부족한 것만은 사실입니다.

무엇보다 복수개의 값을 반환할 수 없고, 레코드 단위로 값을 반환할 수 없습니다.

그렇기는 하지만 오픈소스에서 상용에 버금가는 기능과 발전가능성이 있다는 점에서는 쓰면 쓸수록 좋아지는 DBMS라는 느낌이 기분은 좋습니다.

 

도움이 되었기를 바랍니다.

 

김일형.

 

 

 

>>이성한 님께서 쓰시길<<

 

:: 안녕 하십니까.. 네비스텍에 이성한 입니다.

::

:: 지금 PL/pgSQL에대한 문법을 공부 하고 있는데 다음 예제에서 궁굼증이 있어

::

:: 질문을 합니다.

:: (참고로 Oracle에 PL/SQL과 비교해서 질문을 하겠습니다. 양해를 부탁합니다.)

::

:: 다음과 같은 예제가 PostgreSQL 7.1 Documentation에 있더군요

::

:: ====================================================================

:: create function ftab1_func(integer,text) returns integer

:: as'

:: declare

:: /*---------------------------------------*/

:: /* Parameter Alias */

:: /*---------------------------------------*/

:: var1 alias for $1;

:: var2 alias for $2;

:: begin

:: /*---------------------------------------*/

:: /* Loop Start */

:: /*---------------------------------------*/

:: while var1 > nextval(''f_id_seq'') loop

:: insert into ftab1

:: values(currval(''f_id_seq''),

:: ''aa''||currval(''f_id_seq''),

:: var2||currval(''f_id_seq'')

:: );

:: end loop;

::

:: return var1+1;

:: end;

::

:: 'language 'plpgsql';

:: ====================================================================

::

:: 위 예제는 문법 적으로는 어려운것이 없어 쉽게 이해를 했는데요

::

:: 기능적인 질문이 있습니다.

::

:: 1) PL/pgSQL 에서는 Cursor(Oracle,PL/SQL처럼) 처리기능은 없는가요??

:: (Cursor open, close ,fetch....)

:: 기능이 없다면 Cursor처리를 할 수 있는 다른 방법은 없는가요

::

:: 2) 위 예제 while 중간에 insert 처리를 하는데 중간에 에러 발생시

:: 임의에 처리를 할수 있는 방법은 없습니까

:: (SQL 문장이므로 SQL Error Code 사용 또는

:: Oracle ,PL/SQL처럼 Exceptions으로 처리하는 방법)

::

:: 3) 예러 발생시 ROLLBACK 처리를 하는 방법 /

:: 모든 처리가 완료시 COMMIT 처리 방법은 따로 없는가요?

:: 트랜잭션 관리를 위한...

::

:: 위 3질문에 대한 답변에 대한 sample source 가 있으면 부탁합니다.

::

:: 감사합니다.

::

:: 그럼 수고 하십시오

::

[Top]
No.
제목
작성자
작성일
조회
3193iodbc 처리중 에러 발생
이성한
2001-07-26
2087
3192db restore 시 에러 도와주세요.
박종승
2001-07-26
2145
3194┕>Re: db restore 시 에러 도와주세요.
정재익
2001-07-26 18:45:56
2221
3190컴파일하면 에러가...
임상범
2001-07-26
2136
3188PL/pgSQL 관련 질문입니다..
이성한
2001-07-26
2406
3191┕>Re: PL/pgSQL 관련 질문입니다..
김일형
2001-07-26 12:38:18
2281
3184설치시 에러가...저좀살려주세요
임상범
2001-07-25
1959
3187┕>Re: 설치시 에러가...저좀살려주세요
정재익
2001-07-26 10:08:48
2091
3183아래 에러가 나는데요..왜그런지 도통..
정철희
2001-07-25
2269
3185┕>Re: 아래 에러가 나는데요..왜그런지 도통..
김일형
2001-07-25 23:34:26
2155
3186 ┕>Re: Re: 아래 에러가 나는데요..왜그런지 도통..
정재익
2001-07-26 00:28:26
2327
3189  ┕>Re: Re: Re: 아래 에러가 나는데요..왜그런지 도통..
정철희
2001-07-26 11:20:14
2630
3181히~~또왔네요..
사이버
2001-07-23
2186
3182┕>Re: 히~~또왔네요..
정재익
2001-07-23 18:50:51
2471
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다