[解決済み] Oracle Trigger ORA-04098: トリガーが無効で、再バリデーションに失敗しました。
質問
私は、Oracle 10gデータベースで簡単なトリガーを作成しようとしています。このトリガーを作成するスクリプトは、きれいに実行されます。
CREATE OR REPLACE TRIGGER newAlert
AFTER INSERT OR UPDATE ON Alerts
BEGIN
INSERT INTO Users (userID, firstName, lastName, password) VALUES ('how', 'im', 'testing', 'this trigger')
END;
/
でも、実行すると
INSERT INTO Alerts(observationID, dateSent, message, dateViewed) VALUES (3, CURRENT_TIMESTAMP, 'Alert: You have exceeded the Max Threshold', NULL);
を実行してトリガーを有効にしようとすると、次のようなエラーメッセージが表示されます。
ORA-04098: トリガー 'JMD.NEWALERT' は無効で、再バリデーションに失敗しました。 (0行に影響)
何が原因でこのエラーが発生するのか理解できません。このエラーの原因は何なのかご存知ですか?または、なぜこのようなことが起こるのでしょうか?
よろしくお願いします。
-デービッド
解決方法は?
Oracleは、参照された無効なオブジェクトを再コンパイルしようとします。ここでは、トリガが無効であり、行を挿入しようとするたびにトリガの再コンパイルを試み、失敗し、ORA-04098エラーになります。
あなたは
select * from user_errors where type = 'TRIGGER' and name = 'NEWALERT'
をクリックすると、トリガーが実際にどのようなエラーを取得し、なぜコンパイルできないのかを確認することができます。このケースでは
insert
という行があります。
INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger')
だから作ってください。
CREATE OR REPLACE TRIGGER newAlert
AFTER INSERT OR UPDATE ON Alerts
BEGIN
INSERT INTO Users (userID, firstName, lastName, password)
VALUES ('how', 'im', 'testing', 'this trigger');
END;
/
もし、これを実行したときにコンパイルの警告が表示された場合は
show errors
SQL*Plus や SQL Developer を使用している場合、またはクエリ
user_errors
をもう一度。
もちろん、これはあなたの
Users
テーブルにはこれらのカラム名があり、それらはすべて
varchar2
しかし、おそらくあなたはトリガーでもっと面白いことをするつもりでしょう。
関連
-
SQLラーニングノート--オペランドには1つのカラムが必要です。
-
[解決済み] SQL Serverで実行中の合計を計算する
-
[解決済み] データベースのインデックス作成はどのように行われるのですか?[クローズド]
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] ATTACHで開いたSQLiteデータベースファイルのテーブルを一覧表示するにはどうすればよいですか?
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] SQLiteデータベースで、一度に複数行を挿入することは可能ですか?
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み] Entity Framework VS LINQ to SQL VS ADO.NETでストアドプロシージャを使う?[クローズド]
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
解決策:ユーザー root で localhost:3306 にある MySQL に接続できませんでした。
-
MHAクラスタエラーサマリーの構築
-
[解決済み] Oracleで上位100行を選択する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerにおけるINSERT OR UPDATEに関する解決策
-
[解決済み] SQL Server の VARCHAR/NVARCHAR 文字列に改行を挿入する方法
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] SQL Server の CASE ステートメントで OR がサポートされていない。
-
[解決済み] NOT IN vs NOT EXISTS
-
[解決済み] SQLのインデックスとは何ですか?