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

Ответ 1

Аргументом для extend является количество элементов для добавления в массив, а не конечный размер.

Когда вы добавите тридцать восемь к первоначальным четырем, вы получите сорок два, что, безусловно, больше 41. Ну, это было, когда я пошел в школу, но я уверен, что слышал об изменениях, подобных что если бы они приняли его: -)

Первый работает, потому что добавление шести-четырех дает только десять, ну под лимитом сорок один.

Ответ 2

! [введите описание изображения здесь] (показать приложение)