调用游标中的函数进行循环

时间:2012-12-05 17:51:26

标签: function for-loop plsql cursor

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

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

我写的程序看起来有点像这样:

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无效标识符错误,因为它无法识别 fieldID。我显然已经做了一些完全错误的事情,但是我遇到了一个心理障碍,任何建议都会非常感激

1 个答案:

答案 0 :(得分:1)

我认为你的意思是:

SET    missingdate = fnc_get_date(rec_cur_FindMissingDate.fieldID);