問題タブ [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.

0 投票する
2 に答える
3609 参照

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
ORDERSCUSTOMERS
ORDERLINESORDERS

トリガーはORDERS完全に正常に機能します。新しい注文が挿入されると、その注文が属する顧客内で 次の固有のRECNOが割り当てられます。

一方、トリガーは、属するオーダー内で次の一意のRECNOORDERLINESを割り当てる必要がありますが、恐ろしい{ORA-04091: テーブル ORDERLINES が変化しています。トリガー/関数はそれを認識しない場合があります}例外をスローします。

動作するトリガーは次のとおりです。

そして、これが機能しないトリガーです:

誰かがなぜ最初のものは機能し、2番目のものは機能しないのか説明してもらえますか? そして、それを機能させるために2番目を書き直す方法はありますか?

0 投票する
1 に答える
205 参照

oracle - 更新トリガーで更新されたエントリの ID を取得 - 変更テーブル エラー

更新トリガーを作成しようとしていますが、「変化するテーブル」エラーが発生し続けます。主なアイデアは、ユーザー評価の販売と購入のデータベースです。基本的に、PRODUTOS テーブルの評価が更新されるたびに、売り手の評価を再計算したいと考えています。次のトリガー(およびそのバージョン)を試していますが、どこにも行きません..

ID_USER 値が更新されたエントリの ID_USER と等しいエントリのみを選択するにはどうすればよいですか?.. よろしくお願いします!

0 投票する
1 に答える
312 参照

oracle - Oracle トリガーの作成 - テーブルが変化しています。トリガーはそれを読み取ったり変更したりできません

テーブルが変化しているため、トリガー内のSQLステートメントを変化するテーブルに対して実行できないと思われるため、次のトリガーは機能しませんが、11gを使用していないため、複合トリガーを作成できません。宣言セクションに含めようとPRAGMA AUTONOMOUS TRANSACTION;しましたが、これはコンパイルされません。誰かが私に最善の解決策を提供できますか?

注意: 平易な英語では、このトリガーは、ユーザーが 3 文字未満の長さの個人 ID を設定することを停止することを目的としています。21 文字未満の場合、変数 'format_name_' と等しくありません。

0 投票する
1 に答える
134 参照

sql - 実装時に変更されるOracle SQLトリガー

挿入または更新操作を確実に実行するときに、このトリガーに問題があります。ただし、トリガーはエラーなしで作成されます。目的は、invoice_total が payment_total + credit_total の合計よりも大きいかどうかを確認することです。どんな助けでも大歓迎です:

0 投票する
3 に答える
7552 参照

oracle - ORA-04091: 表SCMA.XXが変更されています。トリガー/関数はそれを認識できない可能性があります

私には2つのテーブルがXXありYY、更新の場合にそれらのトリガーが互いに呼び出しています。

XX のトリガーは次のようになります。

YY のトリガーは次のようになります。

SELECTトリガーのステートメントでYY_RBIUこのエラーが発生していることはわかっています。それを回避するためにトリガーをコーディングするにはどうすればよいですか?

SELECTステートメントをブロックYY_RBIU内にラップしようとしましIF INSERTING THENたが、これは更新に対して実行されません。SELECTupdate が trigger から呼び出されている場合、このステートメントをスキップするにはどうすればよいXX_RBIUですか?

私も入れてみPRAGMA AUTONOMOUS_TRANSACTIONましXX_RBIUたが、デッドロックになっています。

thisthisthisthisも参照してみましたが、解決できませんでした。

どんな助けでも大歓迎です。

0 投票する
2 に答える
1506 参照

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 の回答にコメントとして貼り付けることができませんでした。