Arrays 在PL/SQL中重置数组

Arrays 在PL/SQL中重置数组,arrays,arraylist,plsql,Arrays,Arraylist,Plsql,我声明这样一个关联数组 TYPE t_a_rec IS RECORD ( a_id NUMBER, a_name VARCHAR2 (500), assigned NUMBER:= 0 ); TYPE t_a IS TABLE OF t_a_rec INDEX BY PLS_INTEGER; a t_a; 在部分代码中,我需要将所有赋值重置为零。所以我的代码是: IF flag = TRUE THEN

我声明这样一个关联数组

TYPE t_a_rec IS RECORD
(
a_id         NUMBER,
a_name       VARCHAR2 (500),
assigned          NUMBER:= 0
);



TYPE t_a IS TABLE OF t_a_rec
      INDEX BY PLS_INTEGER;

   a   t_a;
在部分代码中,我需要将所有赋值重置为零。所以我的代码是:

    IF flag = TRUE
     THEN
        FOR i IN a.FIRST .. a.LAST
        LOOP
           a(i).assigned := 0;
        END LOOP;
     END IF;
有没有办法在没有回路的情况下复位? 例如:

   IF flag = TRUE
     THEN

           a(:).assigned := 0; or a(all).assigned := 0;

     END IF;

在关联数组的情况下,除了通过它循环以重置数组元素中的一个值之外,没有任何选项。请通读这本书。你把arryas打错了。请考虑这个例子中的注释代码。
declare
   type t_a_rec is record(
      a_id     number,
      a_name   varchar2(500),
      assigned number := 0);
   type t_a is table of t_a_rec index by pls_integer;
   a t_a;
   li_idx int;
begin
   a(1).a_id := 1;
   a(1).a_name := 'Test Name';
   a(1).assigned := 100;

   a(3).a_id := 2;
   a(3).a_name := 'Test Name 2';
   a(3).assigned := 200;

   /* for i in a.first .. a.last loop      
      dbms_output.put_line(a(i).assigned);
   end loop;*/

   li_idx := a.first;
   while (li_idx is not null) loop
      dbms_output.put_line(a(li_idx).assigned);
      li_idx := a.next(li_idx);
   end loop;
end;

如果删除注释,将出现错误,因为数组中没有索引为2的值。for循环将从其属性的第一个值(a.first-在上面的示例中是1)开始迭代,并将其递增到其attibute的第二个值(a.last,其中是3)。因此,循环索引将使用1,2,3,在第二步中,您将获得数组的无数据发现错误。

Hi@mikron,谢谢您的回答。有没有办法重新分配数组而不是循环来重置它?谢谢