特定の日付に基づいてテーブルから〜700行を更新するプロシージャがあります。 プロシージャが何らかの理由でクラッシュして、プロシージャを開始した場所から開始するのではなく、始まりのステートメントからではなく(たとえば、行214に移動して)、プロシージャを再起動するとします。oracle plsqlの動的なgoto
私はこのような何かしよう:それが動作
begin
goto &label;
<N1>;
dbms_output.put_line(1);
<N2>;
dbms_output.put_line(2);
end;
を、それは人間の相互作用を推定します、と私は手順が自動的にこれをしたいと思います。
アンパサンド(&)がないと、どうすればいいですか? ラベルを変数として宣言すると、ラベルが機能しないか、ラベルを変数として使用する方法がわかりません。
論理を変更することを検討してください。 PL/SQLブロックは、実行時に人間と直接対話することを意味しません。 プロシージャは再実行できるように、別々の「論理ユニット」を持つ必要があります。 –
更新ステータス用の特殊テーブルを作成します。 lablesの代わりに、ロジックをif-then文にラップして、update-statusをチェックします。ステップの後にステータスを更新してコミットします。次のステップではステータスの更新が表示され、正常に実行されます。再実行すると最初にN個のステップはスキップされます。間違ってコミットされた場合は手動で対話する必要があります。この場合、テーブルの更新ステータスをリセット/変更する必要があります。 –
質問はあなたが動的に行くことができる方法についてです、私は知っていますが、私はどのように変数がラベルを宣言することができますどのように問題があるか分からない。 – Iulian