私はストアドプロシージャを作成して、テーブルからIDの束を選択し、結果セットをカーソルに保存してから、カーソルをループし、カーソルでフォーカスされているIDに基づいてテーブルテーブルの行を更新しています。さらにいくつかの条件文を追加することを計画していますが、これまでのところ..
CREATE OR REPLACE PROCEDURE CHANGE_PESONAL_DETAILS
AS
CURSOR
person_cur
IS
select b.id
from blah1 b
inner join blah2 b2 on b.id = b2.fkid;
person_rec person_cur%ROWTYPE;
BEGIN
FOR person_rec in person_cur
LOOP
dbms_output.put_line
(
person_rec.id
);
UPDATE blah1 set Details = DetailsLineOne || ' ' || DetailsLineTwo WHERE id = person_rec.id;
END LOOP;
COMMIT;
END;
私がここに持っているものはうまくコンパイルされますが、実行されると、更新は行われません。カーソルに何があるかを確認するために出力行に追加しましたが、何も出力されません。
カーソルを設定するための私のSelectステートメントは、それ自体で正常に実行され、期待するすべてのデータを返しますが、上記で実行した場合は何も返されません。Beginの後のすべてが実行されていないかのようですが、前述のように、Selectがそれ自体で結果を返す理由はわかりません。
たぶん、カーソルを移入するという文脈では、何かが異なった振る舞いをしているのでしょうか?どんなアドバイスも素晴らしいでしょう。