コードブロックに時間がかかり、処理が更新されるテーブルに進捗変数が作成されているため、完了までにどれくらいの時間がかかります。セーブポイントとコミットとの競合
コードブロックはアトミックトランザクションとして扱われるので、commit
ステートメントを使用しない限り、進捗変数の値は0%または100%しか表示されません。これにより、前のポイントで宣言されたセーブポイントが削除されます。ブロックが発生し、例外が発生した場合は有効ではないと認識されます。
のコードは次のようなものです:
begin
/*do some stuff*/
savepoint p_savepoint;
for q in (somequery) loop /*Really long loop*/
/*Do some other stuff*/
update t_sys_state set p1_progress = percentage
where user_id = 'theuserid';
commit; /*This commit make the real progress value available*/
end loop;
exception
when others then
rollback to p_savepoint; /*This savepoint is not recognized because of the previous commit*/
raise;
end;
は、この周りに方法はありますか?
あなただけのあなたが、 '五$ session_longops'にその情報を入れて見ることができますどの代わりdbms_application_info''使用して検討する必要がありますあなたのループの進行状況を表示したい場合例えばここで:http://stackoverflow.com/a/40154203/330315 –
@a_horse_with_no_nameありがとう、私は明日それを試してみます。 – Typo