ORA-06532:下限超出限制

时间:2014-06-28 05:24:42

标签: sql oracle plsql

请帮助我理解为什么第二个块正在抛出错误但是第一个块正在运行。两个地方的限制都小于声明的数量(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 个答案:

答案 0 :(得分:11)

extend的参数是添加到数组的项目数,而不是最终大小。

当你在原来的四个中增加三十八个时,你得到了四十二个,这肯定大于41个。好吧,就在我上学的时候,但我很确定我会听到一个像如果他们已经制定了它: - )

第一个有效,因为只增加六到四个就会给你十个,远低于四十一个。