我有一个多次使用一个VARRAY的脚本。但是,我似乎无法弄清楚如何在循环一次后重置VARRAY。我编写了以下基本脚本来帮助我排除故障:
DECLARE
TYPE multi_show_id_type IS VARRAY (60) OF VARCHAR2 (10);
multi_show_id multi_show_id_type := multi_show_id_type ();
counter NUMBER := 1;
i NUMBER := 1;
BEGIN
DBMS_OUTPUT.put_line ('BEGIN');
WHILE i < 10
LOOP
DBMS_OUTPUT.put_line (i);
--counter:=0;
--multi_show_id :=multi_show_id_type();
--multi_show_id.delete;
WHILE counter < 25
LOOP
multi_show_id.EXTEND ();
multi_show_id (counter) := counter * counter;
DBMS_OUTPUT.put_line ('VArray: [' || counter || '] [' || multi_show_id (counter) || ']');
counter := counter + 1;
END LOOP;
i := i + 1;
END LOOP;
DBMS_OUTPUT.put_line ('END');
END;
/
此脚本只在循环遍历数组一次时才有效。但是,如果取消注释counter:=0
行,这会强制它循环遍历数组填充循环10次,则会出现ORA-06532
错误。你可以看到我在其他注释行中尝试过的一些东西。任何帮助将不胜感激。
答案 0 :(得分:1)
实际上,@ kff是正确的;你写的代码不起作用,因为VARRAY从第1项开始,而不是零。
如此改变你的代码并且它有效:
...
LOOP
DBMS_OUTPUT.put_line (i);
counter:=1;
--multi_show_id :=multi_show_id_type();
multi_show_id.delete;
WHILE counter < 26
LOOP
...
编辑:如果你想通过循环运行25次,你需要将WHILE循环上限更改为26 ...
答案 1 :(得分:0)
这里似乎有两个问题。首先,VARRAY指数从1.秒开始,一旦你的VARRAY满60件,你就会停止,如声明中所定义。
使用以下内容:
TYPE multi_show_id_type IS VARRAY (250) OF VARCHAR2 (10);
和
counter:=1;
multi_show_id :=multi_show_id_type();
行。如果你想确保不超过4个值,你的内部while循环应该做出限制。