Oracle11g 用于检查客户年龄不工作的SQL触发器

Oracle11g 用于检查客户年龄不工作的SQL触发器,oracle11g,triggers,Oracle11g,Triggers,我试图给客户的生日增加一个限制,确保客户超过18岁 这是我的CREATETABLE语句 create table customer( cust_id char(5) NOT NULL, cust_name varchar(30), cust_birthdate date, primary key(cust_id) ); 我发现不能在constraint中使用SYSDATE,但我在网上找到了一个适合我的情况的触发

我试图给客户的生日增加一个限制,确保客户超过18岁

这是我的CREATETABLE语句

create table customer(
    cust_id             char(5)    NOT NULL,
    cust_name           varchar(30),
    cust_birthdate      date,
primary key(cust_id)
);
我发现不能在constraint中使用SYSDATE,但我在网上找到了一个适合我的情况的触发器

这是我修改的触发器:

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;
/
“Chek Wei”客户未满18岁,但未显示任何错误消息

我还没有学习触发器,但我无法在约束上使用SYSDATE,所以我别无选择

我的扳机怎么了

我使用的是Oracle Database Express Edition 11g第2版


感谢您的帮助。

这种逻辑不是颠倒了吗?你只想在那一天再加上18年 大于sysdate以触发错误


好了……)

像那样将业务逻辑放在数据库中是不好的做法,不建议这样做。这种逻辑不是颠倒了吗?您只希望在该日期加上18年的时间大于sysdate时触发错误。。。。。。
insert into customer values('C0001', 'Chek Wei', TO_DATE('20-OCT-2016', 'dd-MON-yyyy'));