programing

ORA-06532: 구독이 제한을 벗어남

megabox 2023. 10. 6. 21:01
반응형

ORA-06532: 구독이 제한을 벗어남

세컨드 블록이 송구 오류인데 첫번째 블록이 실행되는 이유를 이해할 수 있도록 도와주세요.두 곳 모두 한계치가 선언된 크기(41)보다 작습니다.

Declare
  Type typ_int_array IS VARRAY(41) OF NUMBER;
  v_typ_int_array typ_int_array := typ_int_array(10,20,30,40);
BEGIN
  SYS.DBMS_OUTPUT.PUT_LINE(v_typ_int_array(1));
  v_typ_int_array.extend(6);
  v_typ_int_array(6) := 60;
END;

Declare
  Type typ_int_array IS VARRAY(41) OF NUMBER;
  v_typ_int_array typ_int_array := typ_int_array(10,20,30,40);
BEGIN
  SYS.DBMS_OUTPUT.PUT_LINE(v_typ_int_array(1));
  v_typ_int_array.extend(38);
  v_typ_int_array(38) := 60;    
END;

예외:

**Error :**
Error report -
ORA-06532: Subscript outside of limit
ORA-06512: at line 6
06532. 00000 -  "Subscript outside of limit"
*Cause:    A subscript was greater than the limit of a varray
           or non-positive for a varray or nested table.
*Action:   Check the program logic and increase the varray limit
           if necessary.
10

에 대한 논쟁.extend최종 크기가 아닌 배열에 추가할 항목 수입니다.

원래의 4에 38을 더하면, 41보다 확실히 큰 42가 나옵니다.음, 제가 학교에 갔을 때였는데, 만약 그들이 그것을 제정했다면 제가 그런 변화에 대해 들었을 거라고 확신합니다 :-)

첫 번째 것은 6에서 4를 더하면 41이라는 한계 아래인 10만 얻을 수 있기 때문입니다.

varray size를 41로 선언했습니다. 그러면 이미 4개의 값을 시작했습니다. 그러면 38을 확장합니다. 즉, 이미 시작된 값 (4) + 확장된 값 (38) =42 > 41 입니다. 그래서 그 이유입니다.

언급URL : https://stackoverflow.com/questions/24463919/ora-06532-subscript-outside-of-limit

반응형