2014-06-28 10 views
6

Bitte helfen Sie mir zu verstehen, warum der zweite Block wirft Fehler, aber der erste Block läuft. Beide Orte das Limit ist kleiner als die angegebene Größe (41).ORA-06532: Tiefgestellt außerhalb des Grenzwerts

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; 

Ausnahme:

**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 

Antwort

7

Das Argument extend ist die Anzahl der Einzelteile zu dem Array hinzuzufügen, nicht die Endgröße.

Wenn Sie achtunddreißig zu den ursprünglichen vier hinzufügen, erhalten Sie zweiundvierzig, die definitiv größer als 41 ist. Nun, es war, als ich zur Schule ging, aber ich bin ziemlich sicher, hätte ich von einer Veränderung gehört So, wenn sie es in die Tat umgesetzt hätten :-)

Der erste funktioniert, weil das Addieren von sechs zu vier nur zehn, gut unter der Grenze von einundvierzig gibt.

Verwandte Themen