Oracle11g 用于检查客户年龄不工作的SQL触发器
我试图给客户的生日增加一个限制,确保客户超过18岁 这是我的CREATETABLE语句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,但我在网上找到了一个适合我的情况的触发
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'));