問題タブ [ora-04091]

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 投票する
4 に答える
24371 参照

oracle - ORA-04091: テーブル [blah] は変更中です。トリガー/関数はそれを認識できない可能性があります

最近、大規模で複雑なアプリケーションの作業を開始しましたが、次のエラーが原因でバグが割り当てられました。

問題のトリガーは次のようになります

テーブルには、主キー " t1_pk"、"予定イベント ID" t1_appnt_evnt_id、および別の列 " t1_prnt_t1_pk" があり、別の行の を含む場合と含まない場合がありますt1_pk

トリガーは、この行が別の行を参照している場合、この行が別の行への参照を参照しているのと同じものt1_appnt_evnt_id参照していないことを確認しようとしているようです。

DBA からのバグ レポートのコメントには、「トリガーを削除し、コードでチェックを実行する」と書かれていますが、残念ながら、Hibernate の上に階層化された独自のコード生成フレームワークがあるため、実際にどこにあるのかさえわかりません。書き出されるので、このトリガーを機能させる方法があることを願っています。ある?

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

oracle - データベースのフィールドを自動的に更新する

データベースの列を別の列の集計で自動的に更新したいのですが。関連するテーブルは3つあります。

T_RIDERを介してn:mの関係T_PONYがありますT_RIDER_PONYT_RIDERさらにT_PONYいくつかの列がありますが、ここでのみTMP_PONYLIST関連PONY_NAMEします。

TMP_PONYLISTのセミコロンで区切られたリストです。のPONY_NAMESようなものを想像してください"Twisty Tail;Candy Cane;Lucky Leaf"。何が起こっても、このフィールドを最新の状態に保ちたいと思いT_RIDER_PONYますT_PONY

私の最初のアイデアは、トリガーをオンにすることでしT_RIDER_PONYT_PONYT_RIDER_PONY問題は、トリガー内で読み取ることが不可能であるように思われることです。私は常にを取得しORA-04091ます。3つのトリガーとパッケージ変数を操作するためのヒントをいくつか見つけましたが、これは非常に複雑に聞こえます。

TMP_PONYLISTスキーマを変更するか、完全に削除したほうがいいと思うかもしれません。これらはオプションですが、この質問のトピックではありません。今のところ、アプリケーションに変更を加える必要のない回答にのみ関心があります(アプリケーションはテーブルを直接操作せず、ビューのみを操作するため、ビューを使ったトリックは許可されます)。

TMP_PONYLISTでは、どうすれば自動的に最新の状態に保つことができますか?文字列を連結する方法は興味深いサブ問題であり、私もまだエレガントな解決策を見つけていません。

Oracle Database 10gEnterpriseEditionリリース10.2.0.4.0-64biを使用しています。

アップデート

マテリアライズドビューを使用するというアイデアが好きです。私が持っているのは:

string_agg長いので表示されていませんが、関係ないと思います。

でコンパイルされませんON COMMIT、私は取得しORA-12054ます。ドキュメントの集計はでのみ禁止されていることを理解している REFRESH FASTので、ここでの問題は何ですか?

更新 VincentsとTonysの回答は異なっていましたが、どちらも役に立ちました。Tonysを受け入れましたが、Vincentsの回答も必ず読んでください。

0 投票する
4 に答える
6019 参照

oracle - xxxに更新を挿入する前にトリガーxxxを作成または置換する際のORA-04091

誰かが私が以下のトリガーを修正するのを手伝ってもらえますか?私はこの問題を割り当てられていますが、私の技術的なスキルは限られています。

私のスクリプトは以下のエラーに遭遇しました(ORA 4091):

標準PO番号の処理:27179

.....................................。

POステータスの更新。

承認処理が完了しました。

distid611294gl金額10000.88bill_del_amount0 l_amount 10000.88

いくつかの例外が発生しました**ORA-04091:テーブルPO.PO_DISTRIBUTIONS_ALLが変化しています、

トリガー/関数はそれを認識しない可能性があります**

ORA-06512:「APPS.XXAET_PO_DELIVER_TO_TRG」で、

22行目

ORA-01403:データが見つかりません

ORA-04088:トリガーの実行中にエラーが発生しました

'APPS.XXAET_PO_DELIVER

PL/SQLプロシージャが正常に完了しました。

SQL>

クライアントマシンでカスタマイズされたトリガーを見つけることができましたが、調査した後、SQLの何が問題になっているのかを特定できません。助けてください!

どうもありがとう!ケネス。

0 投票する
8 に答える
5406 参照

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 で) で行いたいので、すべてのアクションの後にこの手順が実行されます。

  1. 親IDを取得する
  2. 現在の親のすべての子から最小の状態を見つける
  3. すべての子の最小状態が親の状態より大きい場合、親を更新します

「変更テーブルエラー」を回避するにはどうすればよいですか? この例で自律型トランザクションを使用しても問題ないでしょうか? テーブルの変更エラーはアプリケーションのロジックに欠陥があることを示しているという意見をいくつか見ましたが、これは本当ですか?また、このエラーを防ぐためにロジックを変更するにはどうすればよいですか?

ありがとう


編集:すべてのすばらしい答えをありがとう!

最後に、トリガーを使用しました (Tom Kyte の記事を指摘してくれた Vincent Malgrat に感謝します)。


EDIT:REAL ENDでは、ストアドプロシージャを使用し、トリガーを削除しました:)

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

sql - LIKEで部分文字列に一致する行を削除しますか?

列にサブストリングが含まれているが、その列のタイプが「Long」であるテーブルから行を削除するにはどうすればよいですか。(はい、Longを使用するべきではないことはわかっていますが、他の誰かの混乱を維持しています)。

私の最初の試みは:

この回答に続く。)

これは次を返します:

SQLエラー:ORA-04091:テーブルblah.longtableが変化しています、トリガー/関数はそれを認識しない可能性があります

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

sql - 変更、トリガー/関数はそれを認識しない場合があります-トリガーの実行中にエラーが発生します

私はこのトリガーを作成し、テーブルに行を挿入している間-TEST_TRNCOMPVISIT次のエラーが発生します-

次のエラーが発生しました。

ORA-04091:表TEST.TEST_TRNCOMPVISITが変更されており、トリガー/関数に表示されない場合があります
。ORA-06512:「TEST.UPDATE_TEST_280510」の4行
目ORA-06512:「TEST.UPDATE_TEST_280510」の10行
目ORA-04088:エラー中トリガーの実行'TEST.UPDATE_TEST_280510'

0 投票する
4 に答える
1522 参照

sql - Oracleのトリガーに関する問題

問題はこれです:CLANと呼ばれる別のテーブルの属性(NUMAFFILIATI)を増加(inseriementoの場合)および減少(キャンセルの場合)するCLAN_AFFILIATIと呼ばれるテーブルにトリガーを実装しました。私がすることは、ユーザーによるクランの更新NUMAFFILIATIをブロックし、これを行ったクランで別のトリガーを実行することを考えていました。

CLAN_AFFILIATIのトリガー(CLAN VARCHAR、AFFILIATO VARCHAR、RUOLO VARCHAR)

CLANでトリガー(NAME VARCHAR、NUMAFFILIATI INTEGER)

しかし、私がやっていることはエラーを報告することです:

どうすればこの問題を解決できますか...。

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

oracle - シンプルなオラクルトリガー

シンプルなもの。私はPLSqlの初心者で、オラクルのエラーメッセージはあまり役に立ちません。

現在の日付、つまりテーブルの「変更日」列で列を更新する単純なトリガーを実行したいと考えています。ただし、奇妙なエラーが発生します。

アイデアはシンプルです

これはエラーをポップアップします:

誰かがこれに対する迅速な解決策を持っていますか?

乾杯、

f.

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

sql - ORA-04091 - トリガーが起動する表を変更するにはどうすればよいですか?

だから私はテーブルを持っていて、トリガーが発火したときにfoo他の行を削​​除したいと思います:foot_foo

テーブル名を変更せずにこれを行うにはどうすればよいでしょうかORA-04091:。トリガー/関数はそれを認識しない場合があります。これは可能ですか?

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

oracle - Oracle After Delete Trigger ...テーブルの変更を回避する方法(ORA-04091)?

次のテーブル構造があるとしましょう。

明らかかもしれませんが、ドキュメントの現在のステータスが最後に入力されたステータス履歴であることは言及する価値があります。

システムのパフォーマンスはゆっくりではありますが確実に低下しているため、上記の構造を次のように変更することをお勧めします。

このようにして、ドキュメントの現在のステータスを本来あるべき場所に表示します。

レガシーアプリケーションの構築方法が原因で、ドキュメントテーブルの現在のステータスを更新するためにレガシーアプリケーションのコードを変更できませんでした。

この場合、従来のアプリケーションコードにアクセスできないという理由だけで、トリガーを回避するためにルールの例外を開く必要がありました。

ステータス履歴に新しいステータスが追加されるたびにドキュメントの現在のステータスを更新するトリガーを作成しました。これは魅力のように機能します。

ただし、あいまいでめったに使用されない状況では、単に新しいステータス履歴を追加するのではなく、最後のステータス履歴を削除する必要があります。そこで、次のトリガーを作成しました。

そして、それは私が悪名高いエラーを得たところORA-04091です。

トリガーをAFTERトリガーとして構成したのに、なぜこのエラーが発生するのか理解しています。

問題は、このエラーを回避する方法がわからないということです。私はしばらくの間ネットを検索しましたが、今のところ役立つものは何も見つかりませんでした。

やがて、Oracle9iを使用します。