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
운영게시판
최근게시물
Oracle Q&A 22201 게시물 읽기
No. 22201
pl/sql 에서 character string buffer too small 오류가 나는 이유...
작성자
구유리
작성일
2005-03-31 16:24
조회수
9,765

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 건 이상 수행이 원할히 되는 것을 확인하였습니다.

이런 메시지가 나오는 원인이 뭐길래 이런 차이를 보이는 걸까요?

도움 부탁드립니다...

(오늘 출근해서 내내... 이 스크립트 붙잡고 있습니다. ㅠ.ㅜ)

 

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

저도 비슷한 경험이 있었는데요

도움이 되실런지

저같은 경우는

SQL-PLUS에서

1. set serveroutput off 상태에서

2. dbms_output.put_line을 사용한 출력을 돌리고

2. set serveroutput on 으로 전환하고

3. 다시 dbms_output.put_line을 사용하여 출력을 한 경우

 

님과 비슷한 오류를 겪었었습니다.(우연히)

그래서 제가 다시 그 오류를 재현해보았더니 약간 다른 오류더군요

오류메세지가

 

1행에 오류:
ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes
ORA-06512: "SYS.DBMS_OUTPUT", 줄 35에서
ORA-06512: "SYS.DBMS_OUTPUT", 줄 198에서
ORA-06512: "SYS.DBMS_OUTPUT", 줄 139에서
ORA-06512: "CALLUSER.OUTPUT_TEST", 줄 10에서
ORA-06512: 줄 1에서

 

이거입니다... 약간 다르죠?

 

 

아 혹시 오라클 버전이 어떻게 되시는지요?

7.3 시절에는 비슷한 에러를 경험한 적이 있었는데...

김흥수(protokhs)님이 2005-03-31 22:11에 작성한 댓글입니다.

오라클 버전은 아래와 같습니다.

Oracle9i Enterprise Edition Release 9.2.0.5.0

 

님이 테스트하면서 나왔던...

ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes

이 에러는 SYS.DBMS_OUTPUT 버퍼사이즈가 충분하지 못해서 나는 오류로 알고 있구요.

execute SYS.DBMS_OUTPUT.enable( 1000000 );

을 이용해서 버퍼사이즈를 충분히 늘려주면 해결되는 것으로 알고 있습니다. ^^

 

제가 겪은 경우는 어떤 케이스일까요? ㅠ.ㅜ

 


 

 

 

 

구유리님이 2005-04-01 10:24에 작성한 댓글입니다. Edit

아닙니다.

제 그 오류는 버퍼사이즈를 충분히 ( 1000000 )

준 경우라도 납니다.

직접 한번 해보시면 아실 겁니다.

특수한 상황에서 나거든요

1. set serveroutput off 상태에서

2. dbms_output.put_line을 사용한 출력을 돌리고

2. set serveroutput on 으로 전환하고

3. 다시 dbms_output.put_line을 사용하여 출력을 한 경우

 

이런 상황이요....

 

김흥수(protokhs)님이 2005-04-02 03:01에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
22205pro c 에서의 쿼리 좀 도와주세요 [1]
이정봉
2005-04-01
1059
22203RHEL AS 3 버전용 oracle 9i 패치 구합니다. [1]
손님
2005-03-31
1270
22202오라클 버전 질문 [1]
이원일
2005-03-31
1328
22201pl/sql 에서 character string buffer too small 오류가 나는 이유... [3]
구유리
2005-03-31
9765
22199System32 폴더에 xa_로 시작하는 파일이 계속 생깁니다. [4]
강동화
2005-03-31
1469
22198문자열에서 특정 글자를 한개만 제거하기 [2]
최주영
2005-03-31
2779
22197평균값을 구하려고 합니다. [2]
손님
2005-03-31
1774
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2025 DSN, All rights reserved.
작업시간: 0.009초, 이곳 서비스는
	PostgreSQL v17.5로 자료를 관리합니다