我有一个多次使用一个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错误。您可以在其他注释行中看到我尝试过的一些内容。任何帮助都将不胜感激。
发布于 2009-06-18 18:23:08
实际上,@akf是正确的;您所编写的代码不会工作,因为VARRAY从项目1开始,而不是从0开始。
这样改变你的代码,它就可以工作了:
...
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...
发布于 2009-06-18 17:11:53
这里似乎有两个问题。首先,VARRAY索引从1开始。其次,当您的VARRAY在声明中定义为60个条目时,您将停止。
使用以下内容:
TYPE multi_show_id_type IS VARRAY (250) OF VARCHAR2 (10);
和
counter:=1;
如果要为每个循环从1开始,请取消对multi_show_id :=multi_show_id_type();行的注释。如果你想确保不超过4个值,你的内部while循环应该有这样的限制。
https://stackoverflow.com/questions/1013874
复制相似问题