0

我有以下 SP,但我希望在使用游标更新记录后将游标作为 OUT 参数。结果是ORA-01002: fetch out of sequence被抛出。自动提交默认是关闭的,所以显然没有问题。

create or replace
PROCEDURE MY_PROC( 
    my_cursor OUT SYS_REFCURSOR
) AS 
    myId my_table.id%type;
BEGIN
    OPEN my_cursor FOR 
      SELECT id FROM my_table
      FOR UPDATE SKIP LOCKED;
    LOOP 
        FETCH my_cursor INTO myId;
        EXIT WHEN my_cursor%NOTFOUND;
        UPDATE my_table SET lastSelected = SYSTIMESTAMP
        WHERE id = myId;
    END LOOP;
END MY_PROC;

我花了太多时间没有成功,所以我认为它不能以这种方式解决。如果你能给我一个提示,我会很高兴的。

提前致谢, Gergely

4

1 回答 1

0

除了对您的问题的实际答案(出于对 Ed Gibbs 的礼貌,我不会在此重复),我认为您的 SP 需要修改。

当您打开光标以检索表中的每个 ID 时,对于找到的每条记录,您都会更新所有表:

UPDATE my_table SET lastSelected = SYSTIMESTAMP;

你想做的可能是:

UPDATE my_table SET lastSelected = SYSTIMESTAMP WHERE id = myId;

希望它有所帮助。S。

于 2013-07-20T21:27:49.133 回答