본문 바로가기

IT관련

오라클 에러 정보 (ORA-06532, ORA-06533) - PL/SQL에서 Arrary(배열) 범위를 벗어난 경우

Oracle DB 내에 있는 프로시저, 함수를 호출할때 아래와 같이 ORA-06532, ORA-06512 에러가 발생하는 경우,

이는 프로시저, 함수내에서 Arrary(배열) 변수를 사용했는데, 이 부분에서 에러가 발생한 것입니다.

 

배열로 선언해놓은 범위를 벗어나서 호출하는 경우에 발생합니다.

 

PL/SQL 에서 배열 첫번째 인자는 0 이 아닌, 1 부터 시작하는 것을 주의할 필요가 있습니다.

 

아래의 PL/SQL 문의 경우 v_arrary 변수는 3개의 데이터(배열멤버)를 가진 배열 변수입니다.

따라서, 배열의 멤버들을 접근하려면 v_array(1), v_arrary(2), v_arrary(3) 처럼 사용해야 합니다.

 


SQL> set serveroutput on
SQL> declare
   type V_ARR is table of varchar2(10);
   v_array  V_ARR;
begin
   v_array := V_ARR('킹', '왕', '짱');

   dbms_output.put_line(v_array(0));
end;
/
  2    3    4    5    6    7    8    9  declare
*
ERROR at line 1:
ORA-06532: Subscript outside of limit
ORA-06512: at line 7

위에서는 v_arrary(0) 을 호출했기 때문에, "ORA-06532: Subscript outside of limit" 에러가 발생한 것입니다.

배열 멤버갯수가 3개인데, 이걸 넘어서 없는 4번째 멤버를 호출하려고 하면, "ORA-06533: Subscript beyond count" 에러가 발생합니다.

 


SQL> set serveroutput on
SQL> declare
   type V_ARR is table of varchar2(10);
   v_array  V_ARR;
begin
   v_array := V_ARR('킹', '왕', '짱');

   dbms_output.put_line(v_array(4));
end;
/
  2    3    4    5    6    7    8    9  declare
*
ERROR at line 1:
ORA-06533: Subscript beyond count
ORA-06512: at line 7

 

이런 ORA-06532, ORA-06533 에러들은 함수, 프로시져를 컴파일 할때는 나타나지 않고, 실행할 때 나타나기 때문에 잘 발견하기 어려운 면이 있습니다.