【问题标题】:oracle call procedure in a cursor loop游标循环中的 oracle 调用过程
【发布时间】:2017-02-16 09:59:15
【问题描述】:

我有以下SELECT 声明:

SELECT AUDITORID 
        FROM SOL.GROUPS WHERE STATUS = 1;

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

怎么做?

【问题讨论】:

  • @Pirate 没有做一些插入
  • 您介意分享insert_ld_per_auditor 的作用吗?我怀疑您最好更改程序以立即对整个数据集执行而不是单个“审计员”。这样一来,您就可以同时避免使用游标,这样会好很多。

标签: oracle plsql


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    不能通过 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 并像之前的评论一样使用 LOOP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2023-04-01
      相关资源
      最近更新 更多