問題タブ [mutating-table]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle - Oracle トリガー - テーブルの変更に関する問題
私のテーブル:
したがって、TableC の項目は TableB の子であり、TableB の項目は TableA の子です。その逆 - TableA の項目は TableB の親であり、TableB の項目は TableC の親です。
親アイテムの状態を制御したい...たとえば、次のデータがあるとしましょう:
親の状態は常に、その子の最小の状態でなければなりません。したがって、TableC を次のように更新するとします。
私のトリガーは自動的に TableB を更新し (id = 1 の状態 = 50 に設定)、次に TableA (id = 1 の状態に状態 = 50 を設定) も更新する必要があります。
これをトリガー (AFTER UPDATE、INSERT、DELETE、TableA、TableB、TableC で) で行いたいので、すべてのアクションの後にこの手順が実行されます。
- 親IDを取得する
- 現在の親のすべての子から最小の状態を見つける
- すべての子の最小状態が親の状態より大きい場合、親を更新します
「変更テーブルエラー」を回避するにはどうすればよいですか? この例で自律型トランザクションを使用しても問題ないでしょうか? テーブルの変更エラーはアプリケーションのロジックに欠陥があることを示しているという意見をいくつか見ましたが、これは本当ですか?また、このエラーを防ぐためにロジックを変更するにはどうすればよいですか?
ありがとう
編集:すべてのすばらしい答えをありがとう!
最後に、トリガーを使用しました (Tom Kyte の記事を指摘してくれた Vincent Malgrat に感謝します)。
EDIT:REAL ENDでは、ストアドプロシージャを使用し、トリガーを削除しました:)
oracle - シンプルなオラクルトリガー
シンプルなもの。私はPLSqlの初心者で、オラクルのエラーメッセージはあまり役に立ちません。
現在の日付、つまりテーブルの「変更日」列で列を更新する単純なトリガーを実行したいと考えています。ただし、奇妙なエラーが発生します。
アイデアはシンプルです
これはエラーをポップアップします:
誰かがこれに対する迅速な解決策を持っていますか?
乾杯、
f.
sql - ORACLE更新トリガー後:ORA-04091変更テーブルエラーの解決
トリガーを作成しようとしています:
テーブルを更新/挿入するときに、必須ではないいくつかのフィールドに自動的に入力します。
これには、table2とtable1(トリガーのサブジェクト)から選択するカーソルを使用する必要があります。
値の一時テーブルや自律型トランザクションを使用せずに、テーブルの変更エラーを回避する方法はありますか?
sql - 挿入のたびにトリガーを起動する方法-Oracle(一括挿入)
挿入されるすべてのレコードの後にトリガーを実行する必要があります。
この検証は、次のような単純な挿入がある場合は正常に機能します。
ただし、次のようなバルクインサートのような場合:
トリガーが変化します。一括挿入として実行した場合にも検証が機能するようにしたいと思います。
この問題の原因となるクエリは
問題は、このクエリが同じテーブル「g_piece」に適用されたトリガーで呼び出されることです。単純な挿入(g_piecevalues(...)に挿入)を続行すると、この問題は発生しません。
この問題を回避するにはどうすればよいですか?ありがとう。
sql - 派生値 (SUM) が手動で誤った値に更新されるのを防ぐ方法
大学の授業で SQL と DB の設計を学んでいます。私たちに与えられた課題の 1 つは、いくつかの子属性の合計である派生属性を持つテーブルを作成することです。例えば:
今、これが良い習慣であるかどうかさえわかりません。私がウェブで行ったいくつかの読書から、導出された値は保存されるべきではなく、ユーザーアプリケーションによって計算されるべきです。その観点は理解できますが、この場合の私の任務は、派生した値を保存することであり、さらに重要なことに、トリガーを介してそれらの整合性を維持することです。これは私にとって比較的新しいものなので、それらを使用することを楽しんでいます。また、より複雑なケースでは、派生した値を保存するために処理時間を節約する価値があると想像します。問題を引き起こしていない、私が導入した保護手段は次のとおりです。
新しい子アイテムが挿入されたときに親 /orderTotal を更新するトリガー。
子アイテムが削除されたときに親 /orderTotal を更新するトリガー。
子 itemTotal が変更されたときに親 /orderTotal を更新するトリガー。
ただし、私が達成する方法がわからない別の保護手段が必要です。親属性 /orderTotal は派生しているため、手動で変更しないでください。誰かがそれを (実際には正しい SUM ではない誤った値に) 手動で変更しようとした場合、(a) 彼らがこれを行うのを防ぐか、(b) 変更が完了したらすぐに古い値に戻します。 .
どちらがより良いアプローチで、どちらが可能ですか (そしてどのように)? 前者を達成する方法がわかりません。トリガーまたは制約のいずれかを介して後者を達成しようとしましたが、どちらも適切ではないようでした。トリガーメソッドは、トリガーを起動したテーブルを変更しようとすると、ORA-04091 エラーを返し続けました。制約メソッドも、制約チェック内でそのような特定のことを行う方法がわからないため、適切ではないと思います。
ちなみに、SQL DeveloperでOracle SQLを使用しています。
ありがとう!
oracle - 同じテーブルにレコードを挿入する INSERT トリガー
同じテーブルに新しいレコードを挿入したいという点で、テーブルに新しいレコードを挿入するときに発生するトリガーがあります。
私のトリガーは:
そのようなエラーが発生します
ORA-04091: table TEST_TABLE is mutating, trigger/function may not see it
同じテーブルに挿入するのを妨げていると思います。
この新しいレコードを同じテーブルに挿入するにはどうすればよいですか。
注:-データベースとしてOracle を使用しています
oracle - クラッシュトリガー-変化するテーブル
Oracleのテーブルの変更に問題があります。2つのテーブルがCustomer
ありPerson
ます。行の変更中に更新ChangeDate
する必要があるため、トリガーを作成しました。残念ながら、場合によっては更新されるトリガーがあり、それがテーブルの変更の問題を引き起こしています。幸い、この変更が変更によるものである場合は、更新時に更新する必要はありません。Customer
Person
Customer
Person
Customer.ChangeDate
Person
Customer
Person
だからここに私の質問があります:トリガーがトリガーによって起動されたことをどのように認識できCustomer
ますか?
oracle - ステートメント レベルのトリガーはテーブルの変更につながる可能性があります
それとも、行レベルのトリガーだけがそのような突然変異を引き起こすと言われていますか?
私は私の質問を言い換えます:
テーブルの変更によってもたらされる制約要因によって影響を受けるのは、どのトリガーの種類ですか?
oracle - Oracle Form FRM-40735:ON-ERRORトリガーで未処理の例外ORA-06502が発生しました
私は以下のようなテーブルトリガーを持っています:
上記のトリガーによって呼び出されるパッケージがあります。パッケージのコードは次のようになります。
パッケージ本体は以下のようになります。
Oracle FormsがDOBデータを更新するたびに、次のようなエラーが発生します。
Oracle Form FRM-40735:ON-ERRORトリガーで未処理の例外ORA-06502が発生しました
しかし、私が以下のようにハードコーディングすると:
以下のようなこの段落コードの代わりに、フォームは正常に機能します。
実際の値に置き換えp_pat_id
ましたが、トリガーエラーが表示されます
では、バグを修正する方法は?日付の値をハードコーディングできません
oracle - トリガー内で ORA-04091 エラーを回避する方法
テーブル A に、テーブル B を変更できる更新後トリガー (トリガー A) があります。
また、テーブル B には更新後のトリガー (トリガー B) があります。これは変更を加えませんが、非正規化のサニティ チェックに対してテーブル A にクエリを実行します。
したがって、トリガー B は次の 2 つの方法のいずれかを起動できます。
- テーブル B を直接更新している場合、または
- テーブル A を更新してトリガー A が起動すると、テーブル B が更新されます。
ケース 2 では、ORA-04091: テーブル名が変更されています。トリガー/関数でエラーが表示されない可能性があります。これは正しいようです。
テーブル A が「悪い状態」であり、早期に終了するかどうかをトリガー B 内でチェックしたい (この場合、サニティ チェックを実行する必要はありません)。
トリガー内でこれをテストする最良の方法は何ですか? 例外を飲み込む例外ハンドラを追加するだけですか? もっと優雅なものはありますか?