【问题标题】:ORA-06532: Subscript outside of limitORA-06532: 下标超出限制
【发布时间】:2014-06-28 05:24:42
【问题描述】:

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

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

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

    当你将三十八加到原来的四上时,你得到四十二,这肯定大于 41。嗯,那是我上学的时候,但我很确定我会听说过这样的变化如果他们颁布了它:-)

    第一个有效,因为将 6 加到 4 只能得到 10,远低于 41 的限制。

    【讨论】:

      【解决方案2】:

      您已声明可变数组大小为 41 然后你已经启动了 4 个值 然后你扩展 38 这意味着 已经主动值(4)+扩展值(38)=42 它> 41 这就是原因。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 2017-04-29
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 2021-10-08
        • 1970-01-01
        相关资源
        最近更新 更多