Oracle存储过程 - 在游标中循环

时间:2012-05-03 16:53:43

标签: stored-procedures plsql oracle10g cursor

我有一个存储过程Procedure1,

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

    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 个答案:

答案 0 :(得分: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;

但如果它只选择某些列,例如“从mytab中选择col1,col3”然后你需要手动定义结构:

type v_record_type is record (col1 number, col3 varchar2(10));
v_record v_record_type;