游标循环中的oracle调用过程

时间:2016-10-07 11:52:59

标签: oracle plsql

我有以下SELECT声明:

SELECT AUDITORID 
        FROM SOL.GROUPS WHERE STATUS = 1;

我需要每个返回statemnet的AUDITORID来调用过程INSERT_LD_PER_AUDITOR (VAUDITORID)

怎么做?

2 个答案:

答案 0 :(得分:4)

如果您确定要循环,可以使用:

begin
  for x in (SELECT AUDITORID FROM SOL.GROUPS WHERE STATUS = 1) loop
      INSERT_LD_PER_AUDITOR(x.AUDITORID);
  end loop;
end;

但正如sstan所写,重构程序以处理所有数据可能更好。

答案 1 :(得分:0)

你不能通过SQL语句调用过程 而且你至少有两种方法可以解决它。 1)创建pl_sql函数并将调用过程设置为函数

create or replace function F_INSERT_LD_PER_AUDITOR (VAUDITORID NUMBER) 
   return NUMBER
is 
begin 
  NSERT_LD_PER_AUDITOR (VAUDITORID);
  return 0;
end;
/

并将其命名为

SELECT F_INSERT_LD_PER_AUDITOR(AUDITORID)
    FROM SOL.GROUPS WHERE STATUS = 1;

2)wirte pl / sql并使用先前评论中的LOOP