問題タブ [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 投票する
3 に答える
2109 参照

oracle - Oracleはトリガーを使用して平均を計算します

学校のプロジェクトでは、冗長な情報を取得し、トリガーを使用して更新する必要があります。「評価」(0 ~ 100 の数字)を含む「recipe_ratings」というテーブルがあります。「レシピ」テーブルには、その特定のレシピの平均評価を含む「評価」と呼ばれる冗長な行があります。

次のような Oracle トリガーを作成しようとしました。

ORA-04091: table name is mutating, trigger/function may not see it. 「自律トランザクション」を実験していますが、トリガーから離れているように感じます。

このトリガーを機能させるにはどうすればよいでしょうか。

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

oracle - java.sql.BatchUpdateException:トリガーを挿入する前のORA-04091

BEFORE INSERT TRIGGERで不思議なエラーが発生しましたが、理解できません。同様の問題でここに投稿された複数の質問を読んだ後でも。

「メソッド」の処理に失敗しました:category_id='foo'およびrequest_id='99'エラー:java.sql.BatchUpdateException:ORA-04091:テーブルSCHEMA.ANIMAL_TABLEが変化しています、トリガー/関数はそれを認識しない可能性がありますORA-06512:at " SCHEMA.TRIGGER_NAME "、7行目ORA-04088:トリガー'SCHEMA.TRIGGER_NAME'の実行中にエラーが発生しました

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

トリガーが保持されているのと同じテーブルでの変更に関するルールを知っていますが、新しい列を変更するときに、:NEWフィールドに対してのみ機能する必要があるものも赤くしています。また、トリガーイベントとしてUPDATEが欠落している可能性があると思いましたが、そうではありませんでした。誰か助けてくれませんか?トリガーとPL/SQLは初めてです。

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

oracle - Oracle 複合トリガー - 削除された行を保存して「使用」する方法は? INDEX BY テーブル?

私は、行を削除すると、残りの行から新しい MAX 値を選択し、それを別のテーブルに書き込む Oracle の DELETE トリガーを求めて、長い間闘っています。面倒な ORA-04091 mutating table エラー (FOR EACH ROW ではテーブルを読み取れない) に出くわした後、Oracle の複合トリガーに切り替えました。

削除された行を最適に保存するにはどうすればよいですか (行ごとに複数の値。それ以降のチェックでは、削除されたスコアが低いスコアではなく、高いスコアであった可能性がある場合にのみ更新されるため)。複数のトリガーイベントがクロスファイアし、たとえば、実際には削除されていないが、Before トリガーイベントによって登録された「DeletedMatches」に対してハイスコアの更新が実行されると、グローバル一時テーブルが混乱して終了する可能性があるのではないかと心配しています。

a) このトリガーでローカルにのみ存在する b) 通常の DB テーブルや一時テーブルのように SQL で使用できるテーブルを作成できますか?

次の (疑似) コードは、一致が削除されるたびに CurrentHighScores テーブルを更新します (古いハイスコアは消え、残りの最高スコアに置き換えられます)。

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

database - 同じテーブルに更新するための更新トリガー

トリガーが読み取り元のテーブルの内容を変更できないことが原因であることがわかっています。
誰かがこれを達成するのを手伝ってくれませんか

このクエリを書くと、次のエラーが発生します

要求された操作の実行中にエラーが発生しました

ORA-04091
table Admin.PATIENT_REGISTRATIONが変化しているため、トリガー/関数に表示されない場合が あります。テーブル%s。%sが変化しています、トリガー/関数がそれを認識しない可能性があります "

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

oracle - トリガーがORA-04091エラーを出している

に after insert トリガーがtable tbl_campboss_reportありますが、それは私に変化を与えています tbl_campboss_report。トリガー/関数はそれを認識しない可能性があります

これは私のトリガーです:

誰でもこれについて私を助けることができますか?
前もって感謝します

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

triggers - Oracle SQLトリガーの挿入/更新---

ソーステーブルで挿入/更新が発生するたびに新しいテーブルに値を挿入できるトリガーを作成したいので、問題を解決してください。

以下は、データを別のテーブルにフェッチするテーブル構造です。

リスト表

Name Null Type


LISTINGID NOT NULL VARCHAR2(28)
LISTINGMANAGERID NOT NULL VARCHAR2(28)
MANAGEAVAILABILITYFLAG VARCHAR2(1)
AVAILABILITYTEXT VARCHAR2(2000)

AREAINQUIRYFLAG VARCHAR2(1)
COUNTRYTEXT VARCHAR2(50)
STATEPROVINCETEXT VARCHAR2(50)
CITYTEXT VARCHAR2(50)
CHECKINTIME VARCHAR2(10)
CHECKOUTTIME VARCHAR2(10)
TIMEZONEID VARCHAR2(20)

PERSONALLINKURL VARCHAR2(150)

GOLDSUBSCRIPTIONSINCE DATE
AUDITPASSFLAG NOT NULL VARCHAR2(1)
MGRONLINEFLAG NOT NULL VARCHAR2(1)
ADMINAPPROVALFLAG NOT NULL VARCHAR2(1)
DELETEDFLAG VARCHAR2(1)
LASTUPDATED NOT NULL DATE
UPDATEDBY NOT NULL VARCHAR2(28)
OCA NOT NULL NUMBER(38)
SUSPENDEDFLAG NOT NULL VARCHAR2(1)
POSSIBLEFEATUREDCITYFLAG NOT NULL VARCHAR2(1)
TOTALPHOTOS NUMBER(38)
SUSPENDEDDATE DATE
OFFLINEDATE DATE
CURRENCY VARCHAR2(3)
POINTCHARGE VARCHAR2(2)
AVERAGEOFREVIEWS FLOAT(126)
NUMBEROFREVIEWS NUMBER(38)
RENTALMODEL VARCHAR2(10)
NOTHANKS VARCHAR2(1)
DIGITALSIGN VARCHAR2(50)

リスト表からの更新または新規挿入を伴う以下の表の結果が必要です。

i) listingid には、リスト テーブルからの listid が含まれている必要があります。

ii) OFFLINE COLUMN には、以下の条件のデータが含まれている必要があります。

AuditPassFlag = 'Y' AND AdminApprovalFlag='Y' AND MgrOnlineFlag='Y' AND DeletedFlag は NULL AND SuspendedFlag !='Y'

iii) TIMESTAMP COLUMN リスト表からの最終更新日。

LISTING_LASTUPDATE テーブル

名前空型


LISTINGID NOT NULL VARCHAR2(20)

IS_OFFLINE VARCHAR2(1)

TIMESTAMP TIMESTAMP(0)

私が書いているトリガーの下に:

リストがオンラインであることを意味する場所の条件に対して適切に機能していません。それを除けば、正常に機能します。

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

oracle - ora-04091 テーブルが変化しています-

表 1 と表 2 のすべての列を比較して「Y」または「N」を返す関数を使用しています。それに基づいて、表 1 を更新します。

しかし、merge ステートメントを実行すると、エラーが表示されます。

ORA -04091 -Table1が変異している、トリガー/関数が表示されない場合があります

どうすればこれを修正できますか?

私が使用しているマージステートメントは次のとおりです。

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

oracle - DB2 トリガーから Oracle トリガーへの変換で ORA-04091 エラーが発生する

したがって、JOBS と TASKS という 2 つのテーブルがあります。

TASKS テーブルには、状態の進行 (「送信中」、「送信済み」、「承認済み」、「完了済み」など) を格納する TAKS_STATUS 列があります。

JOBS テーブルには、TASKS テーブルの TASK_STATUS 列のロールアップ (つまり、最小状態) である JOB_STATUS 列があります。JOBS テーブルには、ジョブに関連付けられた TASKS の数を含む TASK_COUNT 値もあります。

ジョブには 1 つ以上のタスクを含めることができます。各テーブルの JOB_ID はそれらをリンクします。

DB2 には、この状態をロールアップする一連の単純なトリガーがあります。これが真ん中の1つです:

トリガーはトリガー イベントと同じワーク ユニットで実行され、ワー​​ク ユニットのコミットされていない変更を確認でき、行ロックにヒットすることなく発生したばかりの TASK_STATUS 変更をカウントできるため、これは DB2で正常に機能します。

Oracle の翻訳されたトリガーは次のとおりです。

Oracle では、これは次のように失敗します。

どうやらOracleのトリガーは同じコンテキストで実行されず、コミットされていないトリガー更新を確認できないため、トリガー行を含む特定の状態のタスクの数を数えることはできません。

AFTER トリガーを INSTEAD OF トリガーに変更し、トリガー内で TASK_STATUS (および JOB_STATUS) を更新できると思います (ジョブ更新でタスク更新を確認できるようにするため) が、同じエラーが発生しますか? 最初のタスクの更新ではないかもしれませんが、トリガー プログラムがコミット前に多数の TASKS を更新している場合はどうでしょうか。2 番目のタスクが更新されるとどうなりますか?

また、トリガーを削除して、プログラムでアクティブなジョブをスキャンしてそのタスクのステータスを確認することも検討しましたが、それは洗練されていないようです。

Oracleでこのようなものを使用したベストプラクティスは何ですか?