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