游标循环中的oracle调用过程

游标循环中的oracle调用过程,oracle,plsql,Oracle,Plsql,我有以下SELECT语句: SELECT AUDITORID FROM SOL.GROUPS WHERE STATUS = 1; 我需要每个返回statemnet的AUDITORID调用过程INSERT\LD\u PER\u AUDITOR(VAUDITORID) 如何做到这一点?如果您确定需要循环,可以使用: begin for x in (SELECT AUDITORID FROM SOL.GROUPS WHERE STATUS = 1) loop INS

我有以下
SELECT
语句:

SELECT AUDITORID 
        FROM SOL.GROUPS WHERE STATUS = 1;
我需要每个返回statemnet的AUDITORID调用过程
INSERT\LD\u PER\u AUDITOR(VAUDITORID)


如何做到这一点?

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

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

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

您不能通过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) 在前面的评论中使用pl/sql并使用循环

@Pirate nothing make some inserts您介意分享一下每个审计师所做的事情吗?我想你最好改变程序,一次对整个数据集执行,而不是单个的“审计员”。这样,您就可以同时避免使用游标,这会更好。