새소식

300x250
3. Database/Error모음

[Oracle] ORA-06533: 첨자가 개수를 넘었습니다.

  • -
728x90

ORA-06533: 첨자가 개수를 넘었습니다.

ORA-06533: Subscript Beyond Count error

 

1. 현상

 - 오류 모니터링 중 확인 되었고, 오라클 패키지 내 배열 사용 시 크기가 넘어가는 경우 발생하는 오류 였다.

 

2. 원인 분석

 - PL/SQL 에서의 테이블은 오라클 SQL에서의 테이블과는 다르다.

   PL/SQL에서의 테이블은 일종의 일차원 배열이라고 생각하면 이해하기 쉬울것이다.

   테이블은 크기에 제한이 없으면 그 ROW의 수는 데이터가 들어옴에 따라 자동 증가 한다.



EX) 오류 발생 예제

DECLARE

-- 중첩 테이블 선언 
-- ex) 

CREATE OR REPLACE TYPE 타입명 IS TABLE OF 값타입;

TYPE TABLE_1 IS TABLE OF VARCHAR2(10); 

-- 변수 선언 
TEST_VAR TABLE_1; 
BEGIN 

-- 생성자를 사용해 값 할당 (크기는 5) 
TEST_VAR := TABLE_1('하나', '둘', '셋', '넷', '다섯'); -- 테이블을 변수로 선언도 가능. 

-- 맨 마지막부터 2개 요소 삭제 
TEST_VAR.TRIM(2); 

DBMS_OUTPUT.PUT_LINE(TEST_VAR(1));
DBMS_OUTPUT.PUT_LINE(TEST_VAR(2));
DBMS_OUTPUT.PUT_LINE(TEST_VAR(3));

DBMS_OUTPUT.PUT_LINE(TEST_VAR(4));    -- 오류 발생, 해당 데이터 삭제 되었음. 

EXCEPTION WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLERRM);

DBMS_OUTPUT.PUT_LINE( DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);

END;

======================= 출력 ==================== 
하나 
둘 
셋 
ORA-06533: 첨자가 개수를 넘었습니다 
ORA-06512:  19행

 

3. 해결

컬렉션의 요소 개수보다 더 큰 첨자 값으로 참조한 경우 발생되는 예외 이다.

나와 같은 경우는 단순히 컬렉션 배열의 크기를 조절하여 해결 하였다.

300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.