问问题
1337 次
1 回答
1
您的问题是游标循环中的变量始终tabletype
基于游标定义。您需要指定要添加到数组中的表中的哪个字段:
v_owner_internal_id(MyRowPositionInVarray) := d_owner_internal_id.d_owner_internal_id;
同样,您的其他作业也需要更改:
v_internal_id(MyRowPositionInVarray) := d_owner_internal_id.d_internal_id;
显然,将游标循环使用的变量更改为不那么容易混淆的变量是个好主意。
您还可以通过使用光标定义一个数组来稍微简化一下:
TYPE t_rst1 IS VARRAY(500) OF cur_rst1%rowtype;
v_rst1 t_rst1 := t_rst1();
...
for r_rst1 in cur_rst1 loop
...
v_rst1(MyRowPositionInVarray) := r_rst1;
...
dbms_output.put_line(v_rst1(i).d_owner_internal_id || ', ' ||
v_rst1(i).d_internal_id || ', ' ||
v_rst1(i).d_tid || ', ' ||
v_rst1(i).d_entity_name || ', ' ||
v_rst1(i).d_form_seq);
最后,您可以使用以下方法大大简化此操作bulk collect
:
DECLARE
MyTID varchar2(10);
CURSOR Cursor_rst1 IS
SELECT d_owner_internal_id,
d_internal_id,
d_tid,
d_entity_name,
d_form_seq
FROM rtns.itas_rtn_ct_1120_cor tblRecords
WHERE d_form_seq = '2710' --Tax Year =2003
AND D_TID = MyTID;
TYPE t_rst1 IS table OF Cursor_rst1%rowtype;
r_rst1 t_rst1;
BEGIN
MyTID := '0000083';
open Cursor_rst1;
fetch Cursor_rst1 bulk collect into r_rst1;
close Cursor_rst1;
FOR i IN r_rst1.first .. r_rst1.last LOOP
dbms_output.put_line(r_rst1(i).d_owner_internal_id || ', ' ||
r_rst1(i).d_internal_id || ', ' ||
r_rst1(i).d_tid || ', ' ||
r_rst1(i).d_entity_name || ', ' ||
r_rst1(i).d_form_seq);
END LOOP;
END;
于 2012-09-06T18:30:13.743 回答