如何多次填充varray

时间:2009-06-18 16:54:09

标签: oracle plsql

我有一个多次使用一个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错误。你可以看到我在其他注释行中尝试过的一些东西。任何帮助将不胜感激。

2 个答案:

答案 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;

如果您希望从每个循环的1开始,请取消注释multi_show_id :=multi_show_id_type();行。如果你想确保不超过4个值,你的内部while循环应该做出限制。