0

テーブルにレコードを挿入するプロシージャを呼び出すパッケージがあり、このプロシージャを 2 分間隔で 2 回呼び出しています。sys.DBMS_LOCK.sleep (<>);

私が直面している問題は、アプリケーションからの呼び出しフォームが、挿入が完了するまでまだ開いていることです。

ページを送信してページを閉じたときに、バックエンドである種の非同期呼び出しが挿入されるようにするにはどうすればよいですか。データベース プロシージャには、この種のアクティビティを実行するための非同期キーワードはありますか?

ありがとう

アップデート

putData(empNo,EmpName);
sys.DBMS_LOCK.sleep (<>);
putData(empNo,EmpName);

上記により、私のページは2番目の手順が終了するまで残ります。最初の手順が終了するか、ユーザーがページを送信したらすぐにページを閉じたいと思います。

更新 2

DBMS_JOB.SUBMIT(ln_dummy, 'begin putData('||empNo,EmpName||'); end;');

Submitを呼び出す引数の数が間違っているというコンパイルエラーが発生します。

どうすればこれを解決できますか?

4

1 に答える 1

5

PutData() プロシージャには 2 つのパラメーターが必要です。2 つのパラメーターを渡していると思うかもしれませんが、そうではありません。また、EmpName が文字列の場合 (可能性が高いと思われます)、エスケープされた引用符で囲む必要があります。基本的に、ここでは動的 SQL を記述していますが、これは常に注意が必要です。

これを試して:

DBMS_JOB.SUBMIT(ln_dummy, 'begin putData('||empNo||','''||EmpName||'''); end;'); 

「他の問題は、これらのジョブを 10 分間隔で実行する方法です」

SUBMIT() は INTERVAL パラメーターを取ることができます。DBMS_JOB のドキュメントに記載されています。 詳細をご覧ください

ただし、反復ごとに異なるパラメーター値を使用する場合は、おそらくアプリケーションの設計を再考する必要があります。処理する値のテーブルをポーリングする手順が必要です。

またはキューを使用します。それは、あなたが本当に達成しようとしていることに依存します。

于 2012-10-03T14:32:01.423 に答える