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,谢谢您的回答。有没有办法重新分配数组而不是循环来重置它?谢谢