1

我有一个存储过程Procedure1,

  1. 在Procedure1 中,我正在调用另一个返回sys_refcursor ProcResult2 的过程Procedure2。
  2. 我需要遍历这个游标的每一行并将数据插入到一个表中

编码

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 中返回的每一行并插入到新表中。

4

1 回答 1

2

你快到了:

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;
于 2012-05-04T10:04:43.580 回答