2017-07-30 8 views
0

cust_birthdateに制約を追加しようとしていますが、顧客が18歳以上であることを確認してください。顧客の年齢をチェックするSQLトリガーが機能しない

は、ここに私は、私は制約でSYSDATEを使用することはできませんがわかった

create table customer(
    cust_id    char(5) NOT NULL, 
    cust_name   varchar(30), 
    cust_birthdate  date, 
primary key(cust_id) 
); 

table文を作成しているが、私は私の状況に合わせてトリガーをオンラインを発見しました。

insert into customer values('C0001', 'Chek Wei', TO_DATE('20-OCT-2016', 'dd-MON-yyyy')); 

「チェク魏の顧客が18歳未満である:私はこのような何かを挿入すると

CREATE OR REPLACE TRIGGER trgCustomer 
    BEFORE INSERT ON customer 
    FOR EACH ROW 
BEGIN 
    IF(ADD_MONTHS(:new.cust_birthdate, 18 * 12) < sysdate) THEN 
    RAISE_APPLICATION_ERROR(-20001, 'Customer must be at least 18 years old.'); 
    END IF; 
END; 
/

しかし、トリガーが動作しません。ここで

は私が変更されたトリガであります古いですが、エラーメッセージは表示されません。

私はまだトリガーを習得していませんが、私は制約でSYSDATEを使用することができないので、私は選択肢がありません。

私の引き金に何が問題なのですか?私は、Oracle Database Express Editionの11gリリース2

を使用しています

は、すべてのヘルプは高く評価されます。

+0

そのようなデータベースにビジネスロジックを置きます悪い習慣であり、お勧めしません。 – SkryptX

+0

その論理は逆転していませんか?あなたはその日に18年を追加するときだけ、エラーを発生させるsysdateよりも大... –

答えて

1

論理が逆転していませんか?あなたがその日に18歳を追加するとき、あなたは....あり

は、あなたが行く......エラーを発射するだけSYSDATEより 大きいたい:)

関連する問題