2012-12-05 78 views
0

我已经创建了一个程序,它可以找到一些缺少日期的记录,这些记录需要填充。 我写了一个游标,它使用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; 

我作为它不承认 fieldID更新语句得到一个ORA-00904无效的标识符错误。我显然已经做了完全错误的在这里,但我已经打了一个心理障碍,任何建议将不胜感激

+0

不fieldID表2中存在吗?我猜这是TABLE2的UPDATE语句有问题 - 您可能需要添加一个FROM子句。 – EvilBob22

回答

1

我想你的意思:

SET missingdate = fnc_get_date(rec_cur_FindMissingDate.fieldID); 
+0

非常感谢,已经整理了! – leathamadan