問題タブ [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 - 1 つのトリガーで ORACLE Mutating Table エラーが発生しましたが、別のトリガーではエラーが発生しませんでした。なんで?
さて、私は 2 つのテーブル (ORDERS と ORDERLINES) を持っていますが、これらは基本的に同じ問題を抱えており、それぞれにトリガーを設定して問題に対処しています。問題は、テーブル レベルの一意性を持つ PK に加えて、RECID と呼ばれるフィールドに、別のフィールドに対して一意である必要がある別のフィールド RECNO があることです。
テーブルは次のように FK 関連です。
ORDERS.WAREHOUSEID > WAREHOUSES.CUSTOMERID > CUSTOMERS
と
ORDERSLINES.ORDERID > ORDERS
OnORDERS
で、レルム固有の一意のRECNOORDERSLINES
を割り当てるトリガーがあります。
では、RECNOはレコードの領域内で一意である必要があります。
では、RECNOはレコードの領域内で一意である必要があります。BEFORE INSERT
ORDERS
CUSTOMERS
ORDERLINES
ORDERS
トリガーはORDERS
完全に正常に機能します。新しい注文が挿入されると、その注文が属する顧客内で 次の固有のRECNOが割り当てられます。
一方、トリガーは、属するオーダー内で次の一意のRECNOORDERLINES
を割り当てる必要がありますが、恐ろしい{ORA-04091: テーブル ORDERLINES が変化しています。トリガー/関数はそれを認識しない場合があります}例外をスローします。
動作するトリガーは次のとおりです。
そして、これが機能しないトリガーです:
誰かがなぜ最初のものは機能し、2番目のものは機能しないのか説明してもらえますか? そして、それを機能させるために2番目を書き直す方法はありますか?
oracle - 更新トリガーで更新されたエントリの ID を取得 - 変更テーブル エラー
更新トリガーを作成しようとしていますが、「変化するテーブル」エラーが発生し続けます。主なアイデアは、ユーザー評価の販売と購入のデータベースです。基本的に、PRODUTOS テーブルの評価が更新されるたびに、売り手の評価を再計算したいと考えています。次のトリガー(およびそのバージョン)を試していますが、どこにも行きません..
ID_USER 値が更新されたエントリの ID_USER と等しいエントリのみを選択するにはどうすればよいですか?.. よろしくお願いします!
oracle - Oracle トリガーの作成 - テーブルが変化しています。トリガーはそれを読み取ったり変更したりできません
テーブルが変化しているため、トリガー内のSQLステートメントを変化するテーブルに対して実行できないと思われるため、次のトリガーは機能しませんが、11gを使用していないため、複合トリガーを作成できません。宣言セクションに含めようとPRAGMA AUTONOMOUS TRANSACTION;
しましたが、これはコンパイルされません。誰かが私に最善の解決策を提供できますか?
注意: 平易な英語では、このトリガーは、ユーザーが 3 文字未満の長さの個人 ID を設定することを停止することを目的としています。21 文字未満の場合、変数 'format_name_' と等しくありません。
sql - 実装時に変更されるOracle SQLトリガー
挿入または更新操作を確実に実行するときに、このトリガーに問題があります。ただし、トリガーはエラーなしで作成されます。目的は、invoice_total が payment_total + credit_total の合計よりも大きいかどうかを確認することです。どんな助けでも大歓迎です:
oracle - ORA-04091: 表SCMA.XXが変更されています。トリガー/関数はそれを認識できない可能性があります
私には2つのテーブルがXX
ありYY
、更新の場合にそれらのトリガーが互いに呼び出しています。
XX のトリガーは次のようになります。
YY のトリガーは次のようになります。
SELECT
トリガーのステートメントでYY_RBIU
このエラーが発生していることはわかっています。それを回避するためにトリガーをコーディングするにはどうすればよいですか?
SELECT
ステートメントをブロックYY_RBIU
内にラップしようとしましIF INSERTING THEN
たが、これは更新に対して実行されません。SELECT
update が trigger から呼び出されている場合、このステートメントをスキップするにはどうすればよいXX_RBIU
ですか?
私も入れてみPRAGMA AUTONOMOUS_TRANSACTION
ましXX_RBIU
たが、デッドロックになっています。
this、this、this、thisも参照してみましたが、解決できませんでした。
どんな助けでも大歓迎です。
sql - テーブルの変更と :new.values の更新を回避するトリガー
こんな感じの小さなテーブルがあります
そして、以下のルールが機能するようにするトリガー (またはトリガー) を作成する必要が
あります。
- 2 INSERT にグループフィールドの NULL 値が含まれている場合、カウントが 10 未満のグループに割り当てる必要があります。
- 3すべてのグループに 10名の名前がある場合、次のグループ番号を生成する必要があります。- 4テーブルの変更エラー
を回避する必要があります。
これは私が今までやってきたことです:
上記のコードは機能しますが、たとえば、ミラー テーブルから選択して INSERT すると
INSERT INTO people(name) select concat(name,'_next') from people_mirror;
、グループに指定された制限 (10) を超えます。また、PRAGMA AUTONOMOUS_TRANSACTIONを使用することは、テーブルの変更エラーを回避するための最良の方法ではないことを知っています。行トリガーをステートメントトリガーに分割すると、この機能に到達できることはわかっていますが、それを取得する方法がわかりません。
それで誰か?;)
前もって感謝します。
- - - - - - - - - -編集 - - - - - - - - - - - -
これらは機能するトリガーですが、どちらも BEFORE と行タイプであるため、まだ疑問があります。
長すぎるので、@TonyAndrews の回答にコメントとして貼り付けることができませんでした。