2014-06-28 27 views
6

Pleae, neden İkinci satırın hata attığını, ancak ilk bloğun neden çalıştığını anlamanıza yardımcı olur. Sınırı, bildirilen boyuttan daha az yerleştirir (41). ORA-06532: Sınırın dışındaki alt simge

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; 

İstisna:

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

cevap

7

extend argüman öğelerin sayısı, dizi, değil nihai boyutu eklemektir.

Orijinal dördüne otuz sekizi eklediğinizde, kırk iki tane alırsınız, ki bu kesinlikle 41'den büyüktür. Peki, okula gittiğimde oldu ama bir değişiklik hakkında duyduğumdan eminim. eğer böyle bir şey yaparlarsa, eğer böyle bir şey yaparlarsa :-)

İlki, altıdan dörde ekleyerek sadece kırk bir sınırın altında on kat verirsiniz.