次の pl sql プロシージャを使用してテーブルを field1 に更新しようとしました。コンパイルと実行はエラーなしで行われました。このプロシージャを呼び出すと、更新が機能しませんでした。理由はわかりません。for update of .... current of
カーソルで( ) ステートメントを使用しました。コードは以下のとおりです
create or replace procedure p1 is
r1 table1%rowtype;
r2 table2%rowtype;
cursor c1 is select * from table1 for update of field1;
cursor c2 is select * from table2;
begin
open c1;
loop <<outer>>
fetch c1 into r1;
open c2;
loop <<inner>>
fetch c2 into r2;
if condition then
dbms_output.put_line('ok');
update table1
set field1= 1
where current of c1;
end if;
exit when c2%notfound;
end loop inner;
close c2;
exit when c1%notfound;
end loop outer;
close c1;
end;
/
注: IF ステートメントの条件は正しいです。なぜなら、プロシージャを実行するdbms_output.put_line('ok');
と、update ステートメントと (for update of....current of) ステートメントを削除するとループが実行されるたびに、ステートメント ( ) が正常に実行されたからです。 update ステートメント with (for update of....current of) ステートメントを同じ条件で配置すると、update ステートメントは機能しません。