Oracle 存储过程 - 游标内循环
Posted
技术标签:
【中文标题】Oracle 存储过程 - 游标内循环【英文标题】:Oracle stored procedure - Loop within cursor 【发布时间】:2012-05-03 16:53:43 【问题描述】:我有一个存储过程Procedure1,
-
在 Procedure1 中,我正在调用另一个返回 sys_refcursor ProcResult2 的过程 Procedure2。
我需要遍历这个游标的每一行并将数据插入到一个表中
代码
Create Procedure1()
as
ProcResult1 Sys_refcursor;
begin
Procedure2(ProcResult2);
For eachrow in ProcResult2
Loop
insert into test_table(ProcResult2.Id);
end loop;
end ;\
任何想法,关于如何实现 2. 功能的指针?也就是遍历 ProcResult2 中返回的每一行,插入到一个新表中。
【问题讨论】:
【参考方案1】:你快到了:
Create Procedure1()
as
ProcResult1 Sys_refcursor;
v_record ???; -- See below
begin
Procedure2(ProcResult2);
Loop
fetch ProcResult2 into v_record;
exit when ProcResult2%notfound;
insert into test_table(v_record.Id);
end loop;
close ProcResult2;
end;
您需要使用与游标返回的结构相匹配的结构声明变量 v_record - 即,您需要在构建过程时知道游标记录的结构。如果光标返回“select * from mytab”,那么您可以使用:
v_record mytab%rowtype;
但如果它只选择某些列,例如"select col1, col3 from mytab" 那么你需要手动定义结构:
type v_record_type is record (col1 number, col3 varchar2(10));
v_record v_record_type;
【讨论】:
以上是关于Oracle 存储过程 - 游标内循环的主要内容,如果未能解决你的问题,请参考以下文章