【问题标题】:Oracle stored procedure - Loop within cursorOracle 存储过程 - 游标内循环
【发布时间】:2012-05-03 16:53:43
【问题描述】:

我有一个存储过程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 中返回的每一行,插入到一个新表中。

【问题讨论】:

    标签: stored-procedures plsql oracle10g cursor


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2011-03-14
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多