请帮助我理解为什么第二块是抛错误,但第一个块是running.Both的位置,限制是小于大小声明(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
发布于 2014-06-28 05:28:59
extend
的参数是要添加到数组中的项数,而不是最终大小。
当你把三十八加到原来的四,你得到四十二,这肯定大于41。嗯,那是我上学的时候,但我敢肯定,如果他们颁布了,我肯定会听到这样的变化:-)
第一种方法有效,因为加6到4只会给你10,在41的限制下。
发布于 2021-08-31 04:31:04
您已经声明varray大小为41,那么您已经启动了4个值,然后扩展了38,这意味着已经有了主动值(4) +扩展值(38) =42,这就是原因所在。
https://stackoverflow.com/questions/24463919
复制相似问题