2016-05-30 7 views
-2

私はOracle(10g)データベースの初心者です。Oracle 10gトリガー

私の問題は、私は構文についてはよく分からないと私は、Oracleデータベース用にこのトリガーを書き換える必要があるだろうということです。

CREATE OR REPLACE TRIGGER trigger 
BEFORE INSERT OR UPDATE 
ON table 
FOR EACH ROW 
BEGIN 
    IF :NEW.date > SYSDATE THEN 
     RAISE_APPLICATION_ERROR(-20950, 'Error!'); 
    END IF; 
END; 
+0

なぜだけではなく、それを実行し、それが動作するかどうかを確認しますか? – Mureinik

+0

コードが動作すればここに書き込むと思いますか? – KRiSTiN

+2

もしそうでなければ、エラーを(もしあれば)共有するか、それがどのように誤解しているかの説明(エラーがない場合)が本当に助けになります。 – Mureinik

答えて

0

あなたが引き金とテーブルの名前を変更するに述べた、しかし、I 「が(単に完全性のため)ここで再びそれらを指摘するでしょう:

  1. 『トリガー』は予約されている単語:

    が、私は3つのミスを参照してください。私は以下の例で "ctrigger"に変更しました。

  2. "table"は予約語です。私は以下の例では「ジャンク」に変更しました。
  3. "date"は予約語です。私は以下の例で "cdate"に変更しました。
  4. 私はこの時点で "cdate"がDATEのデータ型であると仮定します。

以下のコードは正常に機能します。これをシステム上で「そのまま」実行して、動作するかどうかを確認してください。

それでも、テーブルで失敗する場合は、テーブルの定義を参照してさらにトラブルシューティングを行う必要があります。

drop table junk; 

    create table junk (id number, 
         cdate date); 

    CREATE OR REPLACE TRIGGER ttrigger 
    BEFORE INSERT OR UPDATE 
    ON junk 
    FOR EACH ROW 
    BEGIN 
     IF :NEW.cdate > SYSDATE THEN 
      RAISE_APPLICATION_ERROR(-20950, 'Error!'); 
     END IF; 
    END; 
/

テスト結果は、次のとおりです。

SQL > create table junk (id number, 
         cdate date); 
    2 
    Table created. 

    Elapsed: 00:00:00.07 
    SQL > CREATE OR REPLACE TRIGGER ttrigger 
    BEFORE INSERT OR UPDATE 
    ON junk 
    FOR EACH ROW 
    BEGIN 
     IF :NEW.cdate > SYSDATE THEN 
      RAISE_APPLICATION_ERROR(-20950, 'Error!'); 
     END IF; 
    END; 
/

    Trigger created. 

    Elapsed: 00:00:00.20 
    SQL > show err 
    No errors. 
    SQL > 
+0

あなたのソリューションに感謝しますが、問題はテーブルと属性の名前が引用符で囲まれています。 – KRiSTiN

+0

これは何と関係がありますか?テーブル名には大文字と小文字が混在しているため、テーブル名の前後に引用符を使用します。それは、トリガコード、私が書いたもの、またはそれが動作する方法とは関係ありません...あなたのテーブル定義を投稿してください。 – Ditto

関連する問題