我正在尝试向cust_birthdate添加约束,确保客户已超过18岁。
这是我的创建表语句
create table customer(
cust_id char(5) NOT NULL,
cust_name varchar(30),
cust_birthdate date,
primary key(cust_id)
);
我发现在约束中不能使用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;
/
然而,当我插入这样的东西时,触发器将不起作用:
insert into customer values('C0001', 'Chek Wei', TO_DATE('20-OCT-2016', 'dd-MON-yyyy'));
'Chek Wei'客户不到18岁,但没有显示错误信息。
我还没有学习触发器但是因为我不能在约束上使用SYSDATE,所以我别无选择。
我的触发器出了什么问题?
我正在使用Oracle Database Express Edition 11g第2版
感谢任何帮助。
答案 0 :(得分:1)
这个逻辑没有逆转吗?你想要的只是你在那个日期增加了18年 比sysdate更大的解决错误......
你去....:)