PLSQLのカーソル変数を利用したUpdateについて教え

Writer: admin Type: タブレット端末 Date: 2018-12-14 00:00
PLSQLのカーソル変数を利用したUpdateについて教えてください。下記の例のようにカーソル変数でFETCHしたレコードを別テーブルへINSERTした後、FECTHしたレコードのFLGをUPDATEするというような処理をやりたいのですが、PLS-00413:CURRENT OF句の識別子はカーソル名ではありません。とエラーが出力されます。解決方法を教えてください。TYPE TYPE_REFCUR IS REF CURSOR;CUR_1 TYPE_REFCUR;REC_1 test_table%ROWTYPE;BEGIN OPEN CUR_1 FOR SELECT * FROM test_table WHERE FLG = '1' LOOP FETCH CUR_1 INTO REC_1; EXIT WHEN CUR_1%NOTFOUND; ~FETCHしたデータを別テーブルへINSERT処理~ UPDATE test_table SET FLG=’2’ WHERE CURRENT OF CUR_1; END LOOPCLOSE CUR_1;共感した0###REF CURSORにする意味が分からないのとCURSORでCURRENT OFでUPDATEするなら元のSELECT文にFOR UPDATEがいると思いますが。CURSOR CUR_1 ISSELECT * FROM test_table WHERE FLG = '1' FOR UPDATE;REC_1 test_table%ROWTYPE;BEGIN OPEN CUR_1; LOOP FETCH CUR_1 INTO REC_1; EXIT WHEN CUR_1%NOTFOUND; ~FETCHしたデータを別テーブルへINSERT処理~ UPDATE test_table SET FLG=’2’ WHERE CURRENT OF CUR_1; END LOOPCLOSE CUR_1;ナイス0
###記載漏れ失礼しました。REF CURSORにしている理由は、SELECT文の条件を変更し、同じファンクション内で使いまわしているためです。そのため、通常のカーソルではなく、カーソル変数を利用しています。ご指摘頂いている内容を加味し、下記のようにしてみましたが、同様のエラーが出力されNGでした。TYPE TYPE_REFCUR IS REF CURSOR;CUR_1 TYPE_REFCUR;REC_1 test_table%ROWTYPE;BEGINOPEN CUR_1 FORSELECT *FROM test_tableWHERE FLG = '1'FOR UPDATE;  ←追加LOOP~

 

TAG