티스토리 뷰

■ 에러

ORA-06502:PL/SQL:수치 또는 값 오류:문자열 버퍼가 너무 작습니다.

 

■ 원인1 : 수치 또는 값의 에러가 발생했습니다.

NULL 데이터 처리가 불충분할 때

ORA-06502와 숫자의 조합의 경우에 흔히 있는 에러가 NULL의 핸들링이 부족한 것으로 인해 발생하는 에러이다.

예를 들면 아래의 소수코드로 간단하게 재현할 수 있다.

다만, 실제 개발에서는 난해한 처리와 NULL 데이터의 특수성으로부터 테스트를 빠져나와 부정한 데이터가 입력될 때까지 아무 일도 없는 경우도 적지않게 있다.

 

<예시>

CREATE OR REPLACE PROCEDURE RIVUS.ORA_06502_NUM
IS
	vStr VARCHAR2(10);
BEGIN
	-- OK
	vStr := 'abc';
	FOR i in 1 .. LENGTH(vStr) LOOP
		DBMS_OUTPUT.PUT_LINE(SUBSTR(vStr,i,1));		
	END LOOP;
 
	-- NG
	vStr := NULL;
	FOR i in 1 .. LENGTH(vStr) LOOP   -- LENGTH(NULL) → NULL
		DBMS_OUTPUT.PUT_LINE(SUBSTR(vStr,i,1));		
	END LOOP;
END;
/

 

<실행결과>

SQL> CALL ORA_06502_NUM();
a
b
c
CALL ORA_06502_NUM()
     *
1행에서 에러가 발생했습니다.:
ORA-06502: PL/SQL: 수치 또는 값의 에러가 발생했습니다.
ORA-06512: "RIVUS.ORA_06502_NUM", 행14

 

■ 원인2 - 수치 또는 값의 에러 : 문자열 버퍼가 너무 작습니다.

프로시저(PROCEDURE)나 함수(FUNCTION) 내에 선언된 변수의 크기보다 더 큰 값을 대입할 때 발생하는 에러이다.

새로운 환경에 데이터를 이행한 경우 등에는 캐릭터 세트의 차이에 의해

캐릭터 라인 길이의 바이트 사이즈가 다른 것으로 발생한다.

 

즉, 문자열을 담으려는 변수 A를 VARCHAR2(2048)로 선언 후에 실제 문자열의 크기가 3000인 값을 대입하면

해당 [ORA-06502]에러가 발생한다.

 

 

참고 : 문자 코드 문자 세트 / NLS_LENGTH_SEMANTICS

 

아래의 예시는 데이터베이스 캐릭터세트가 Shift-JIS로 작성된 데이터베이스에서 실행했다.

 <예시>

CREATE OR REPLACE PROCEDURE RIVUS.ORA_06502_CHAR
IS
	vCharStr  VARCHAR2(1 CHAR);
	vByteStr  VARCHAR2(2);
	-- vByteStr  VARCHAR2(3);
BEGIN
	vCharStr := '韓'; -- EUC 3 Byte Code 
	DBMS_OUTPUT.PUT_LINE(lengthb(vCharStr) || '바이트');
	DBMS_OUTPUT.PUT_LINE(vCharStr);
 
	-- SJIS에서는 2바이트이지만 EUC에서는 3바이트가 필요하다.
	vByteStr := convert(vCharStr,'ja16euc'); 
	DBMS_OUTPUT.PUT_LINE(lengthb(vByteStr) || '바이트');
END;
/

 

<실행결과>

SQL> CALL ORA_06502_CHAR();
2 바이트 
韓
CALL ORA_06502_CHAR()
	*
1행에서 에러가 발생했습니다. :
ORA-06502 : PL / SQL : 숫자 또는 값 오류 : 문자열 버퍼가 너무 작습니다. 
ORA-06512 : " RIVUS.ORA_06502_CHAR" , 12 행

 

<추가설명>

오라클(Oracle)에서 VARCHAR2의 byte 최대 크기에 대하여.

SQL의(테이블(Table)이나 뷰(View)의) 최대크기는 4000byte까지 지원,

PL/SQL의 최대크기는 32K(32767byle)까지 지원한다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함