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;

私は成功せずにこれにあまりにも多くの時間を費やしたので、この方法では解決できないと思います. ヒントになれば幸いです。

前もってありがとう、ガーゲリー

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 に答える