pl/sql 을 이용하여 아래와 같이 목록을 화면에 출력하는 스크립트를
작성하였습니다.
-- 아래 --
execute SYS.DBMS_OUTPUT.enable( 90000000 );
CREATE OR REPLACE PROCEDURE SAMPLING_JIBA
IS
vStmt VARCHAR2(32767) := NULL;
...
BEGIN
LOOP
vStmt := NULL;
...
SELECT
aa||'#'||bb||'#'||cc
INTO
vStmt
FROM
table
WHERE ...
;
DBMS_OUTPUT.PUT_LINE( vStmt );
...
-----------------------------------------
그런데 이 스크립트를 실행하면 1000 여건 정도를 화면에
출력하다가
ERROR:
ORA-06502: PL/SQL: numeric or value error: character string buffer
too small
ORA-06512: at "SYS.DBMS_OUTPUT", line 238
ORA-06512: at "SYS.DBMS_OUTPUT", line 260
ORA-06512: at line 1
와 같은 에러메시지를 띄웁니다.
변수사이즈도 충분히 주었고 loop 시작할 때마다 초기화하고 있기
때문에 문제될 것은 없어보이는데(제 지식으로는...ㅠ.ㅜ)
원인을 찾아볼 생각으로 이런 저런 시도를 하던 끝에 화면에
출력해주는 구문(DBMS_OUTPUT.PUT_LINE( vStmt );) 을 제거한 후에는
3000 건 이상 수행이 원할히 되는 것을 확인하였습니다.
이런 메시지가 나오는 원인이 뭐길래 이런 차이를 보이는
걸까요?
도움 부탁드립니다...
(오늘 출근해서 내내... 이 스크립트 붙잡고 있습니다.
ㅠ.ㅜ)
|