2011-10-26 9 views
0

に更新され与える:オラクル - トリガーが作成されますが、私は、次のトリガーを作成していたエラーいつでもデータは

CREATE TRIGGER Trigger_UpdateTrainingDelivery 
    AFTER DELETE OR INSERT OR UPDATE OF STARTDATE 
    ON TPM_TRAININGPLAN 
    BEGIN 
     UPDATE TPM_PROJECTVERSION V 
     SET TRAININGDELIVERYSTART = (SELECT MIN(STARTDATE) FROM TPM_TRAININGPLAN WHERE PROJECTID=V.PROJECTID AND VERSIONID=V.VERSIONID AND TRAININGPLANTYPE='prescribed') 
    END; 

私はそれを作成するときに、私は警告を取得:、しかし

Warnings: ---> 
    W (1): Warning: execution completed with warning 
      <--- 

をとにかくそれはまだ作成されています。 TPM_TRAININGPLANで行を修正すると、エラーが発生します。

>[Error] Script lines: 12-12 ------------------------ 
ORA-04098: trigger 'TPMDBO.TRIGGER_UPDATETRAININGDELIVERY' is invalid and failed re-validation 
Script line 12, statement line 1, column 7 

トリガーに何か問題がありますか?私はトリガーでUPDATEステートメントを単独で実行することはできますが、それは正常に実行されるので、何か問題はないとは思われません。

答えて

4

あなたがあなたのUPDATE文の末尾にセミコロンが欠落していることが表示されます。

USER_ERRORSを問い合せると、SQL * Plusにアクセスする必要なく、SQL * PlusがSHOW ERRORSコマンドを使用した場合と同じエラー情報が表示されます。

SELECT line, position, text 
    FROM user_errors 
WHERE name = 'TRIGGER_UPDATETRAININGDELIVERY' 
ORDER BY sequence 
+0

これは間違いなくバグです!私がセミコロンを入れた場合、Aquaは私が2つの異なるステートメントを実行していると思い、無効なステートメントエラーが発生すると思うので、フリークアウトします。私はそれを間違って私のトリガ構文の実際のエラーとして誤解し、セミコロンを削除しました。私はこれをすべてVisual Studio(セミコロンを使用して説明しました)で実行しました。今はすべて完璧です。 –

0

コンパイル時にエラーが報告されましたか?

SQL> show errors trigger trigger_updatetrainingdelivery 
+0

残念ながら、私は唯一の –

+0

@MikeChristensen ..サーバーへのリモートアクセスを持っているとのSQLPLUSアクセス権を持っていない:FYI、SQL * Plusは(TNSリスナーの上にあなたがアクセスを使用しているものは何でも同じように、リモートサーバーにアクセスすることができますそれ)。私はこれがSQL * Plusを使用する通常の方法だと言っています。マシンにOracle Clientをインストールすると、少なくともnetcaを実行した後、または手動でtnsnames.oraを編集した後で動作するはずです – derobert

0

私はこれを理解しました。これは実際にはAqua Data Studioのバグです。私はこのクエリーを実行するために使用しています。なんらかの理由で、トリガ内のセミコロンは正しく処理されません。私はこのバグを報告しますが、私は回避策を見つけた:

File->Options->General 
Uncheck: ';' Statement separator 
関連する問題