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

时间:2017-07-30 00:23:29

标签: oracle11g triggers

我正在尝试向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版

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

这个逻辑没有逆转吗?你想要的只是你在那个日期增加了18年 比sysdate更大的解决错误......

你去....:)