Stored Procedure가 성능 면에서는 일반 Query 보다 앞선 다는 걸 알면서도 선뜻 사용하기가 주저해진다. 익숙하지 않는 부분이 하나 일 것이고, 디버깅도 쉽지 않기 때문일 것이다.

뭐... 요즘처럼 JDBC 이외에 ORM 까지 사용하는 세상에 Stored Procedure는 정말 찬밥 이기 쉬운 듯 하다.

하지만... 장점도 있는 것이... DB dependent 한 Code를 Stored Procedure로 숨길 수도 있는데.. 이 부분은 Product를 개발하는 입장에서는 정말 매력적인 장점이 아닐까 생각 된다.

뭐.. 어쩌다가 요즘 혼자 개발하다가 갑자기 Stored Procedure를 쓸 일이 생기니 좀 당황 스러웠다.

생각해 보면 예전에 DBA가 SQL*PLUS에서 Stored Procedure를 어떻게 실행하는 지 물어 보기도 했으니.. 그리 부끄러워 할 일은 아닌 듯 하다.

일단 Stored Procedure를 실행 할려면 아래 처럼 하면 된다.

var rc refcursor;

execute ( ... , : rc);

print rc;

우리회사는 보통 Cursor를 제일 마지막에 사용하다 보니 위에 처럼 Output Cursor를 마지막에 넣어 주고... print 문으로 Cursor를 찍어 본다.

그리고 개발을 하다 보니 Stored Procedure가 LOOPING을 도는 것 같은 데 확인할 방법이 없다.

뭐.. 이럴 때는 Query를 확인 해야 하는 데 아래와 같이 CURSOR OPEN 하기 전에 Query를 찍으면 도움이 될 듯 하다.

dbms_output.put_line(p_sql);

근데.. 이걸 했는데도 Query가 콘솔에 찍히지 않아 왜 그런가 확인해 봤더니 아래 환경 변수를 ON 시켜 주어야 한다나..

SET SERVEROUTPUT ON

확인해 보니깐..
조건절을 잘못 넣어서 2억개가 넘는 ROW를 CURSOR에 넣고 있었다...-.-


어쩟든 기존에 개발 되어 있던 여러 Stored Procedure를 참조해서 필요한 Stored Procedure를 개발했는데.
참 어처구니 없는 것이... PL/SQL에는 문자열 split 함수가 없다.
인터넷을 뒤지고 다녔더니.. 다들 자기 들 만의 문자열 split 함수를 올려 놨다.
마침 Vinayak이 방에 놀러 왔길 래 사정 얘기를 했더니..
OAS에서 Cursor, Pipe를 이용해 구현한 함수와 사용 예제를 보여주어 덕분에 쉽게 해결 됐다.
다음에 또 stored procedure를 개발할 일이 생겼을 떄는 split 함수가 지원 되기를 기원한다.


'개발자세상 > Database관련' 카테고리의 다른 글

오라클 DB에서 테이블마다 용량 구하기  (0) 2013.08.10
Overlap 데이터 구하기  (0) 2013.08.04
오라클 실행계획 보기  (0) 2010.03.03
ORACLE 사용자 생성  (0) 2010.03.03
ORA-30557  (0) 2009.12.09
Posted by headiron
,