テーブル 'tab1'のいくつかのカラムをいくつかの値(別のテーブル 'tab2'から取得可能)で更新することになっています。今、 'tab1'は、(MQから別のシステムで)数秒ごとに新しいレコードを挿入しています。 'tab1'に新しいレコードが追加されるとすぐに 'tab1'を更新するソリューションを設計したいと考えています。レコードが追加されたのと同じ瞬間に完了する必要はありませんが、更新が早ければ早いほど良いでしょう。Oracleトリガーよりも優れたアプローチ
1)最初に、tab1に「before insert」トリガーがあると思ったので、レコードを更新することができましたが、その設計はArchitectによって徹底的に審査されました。組織はデータベーストリガーの使用を許可していません(理由はわかりませんが、それは制限されています)。
2)次に実行するストアドプロシージャを作成します'tab1'のレコードの更新。このストアドプロシージャは、シェルスクリプトから長時間実行されるループ内で呼び出されます。すべての反復の後、3秒間の休止があり、次のループが開始され、再びストアされたprocが呼び出されます。この仕事は午前12時から午後11時59分まで実行され、毎晩再開されます。
私の質問です - これにはデータベースのみの解決策はありますか?他のソリューションも歓迎ですが、デザインのシンプルさは大きなプラスになります。ある同僚は、データベース内でジョブを実行する「トリガーのような」ソリューションがあるかどうか疑問に思っていたので、シェルスクリプトを書く必要はありません。
何か指摘します!
「トリガーのような」意味ではありません。シェルスクリプトの代わりに[スケジュールされたジョブ](https://docs.oracle.com/cd/E11882_01/server.112/e25494/schedover.htm#ADMIN033)を使用してプロシージャを呼び出すことができます。データベース。許可されていますか? –
データベース専用のソリューションは、 "トリガー"と呼ばれていますが、これは幹部の命令で許可されていないと言いました。運が良かった。 –
私は@Alex Pooleに同意する必要があります。「データベースのみ」のソリューションを使用する場合は、ストアドプロシージャを作成し、データベース内のジョブとしてスケジュールします。 – tale852150