在游标中调用函数 for 循环

Posted

技术标签:

【中文标题】在游标中调用函数 for 循环【英文标题】:Call a function in a cursor for loop 【发布时间】:2012-12-05 17:51:26 【问题描述】:

我创建了一个过程,它可以找到一些需要填充的缺少日期的记录。 我编写了一个游标,它使用 select 语句来查找这些记录,并打算使用 for 循环来更新它们。

应用程序中有一个现有的公共函数,如果我将记录的 ID 传递给它,它将返回我需要的日期。我的问题实际上是一个语法问题,我如何在游标 for 循环中调用这个公共函数并将我需要的变量传递给它以获取日期,然后更新我在游标选择语句中找到的记录。

我写的过程有点像这样:

CREATE OR REPLACE PROCEDURE PRO_POPMISSINGDATE IS

CURSOR cur_FindMissingDate IS
 SELECT fieldID,
        field2,
        field3
 FROM table1
      table2
      table3
 WHERE CONDITION 1
       CONDITION 2
       CONDITION 3

BEGIN

FOR rec_cur_FindMissingDate IN cur_FindMissingDate
LOOP


BEGIN

        UPDATE TABLE2
        SET    missingdate = fnc_get_date(fieldID);

        WHERE  field2 = field4

        COMMIT;

    EXCEPTION
        WHEN OTHERS THEN

            dbms_output.put_line('Error updating record ' || SUBSTR(SQLERRM, 1, 250));
            ROLLBACK;
    END;
END LOOP;
END PRO_POPMISSINGDATE;

我在更新语句中收到 ORA-00904 无效标识符错误,因为它无法识别 字段 ID。显然我在这里做了一些完全错误的事情,但我遇到了心理障碍,任何建议都将不胜感激

【问题讨论】:

TABLE2 中是否存在 fieldID?我猜是 TABLE2 的 UPDATE 语句有问题——您可能需要添加 FROM 子句。 【参考方案1】:

我想你的意思是:

SET    missingdate = fnc_get_date(rec_cur_FindMissingDate.fieldID);

【讨论】:

非常感谢,已经整理好了!

以上是关于在游标中调用函数 for 循环的主要内容,如果未能解决你的问题,请参考以下文章

在for循环中调用异步函数

如何在 for 循环中调用参数化构造函数。

sqlserver自定义函数里面 怎么循环查询多条结果集

保存在 txt (c++) 中调用 for 循环的函数的输出

在for循环中调用函数-python [关闭]

为啥在 for 循环的条件下调用函数是不好的?