【问题标题】:SQL trigger to check customer age not working用于检查客户年龄的 SQL 触发器不起作用
【发布时间】:2017-07-31 20:43:18
【问题描述】:

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

感谢任何帮助。

【问题讨论】:

  • 像这样将业务逻辑放入数据库是不好的做法,不推荐。
  • 这个逻辑不是倒过来的吗?只有当您将 18 年添加到该日期大于 sysdate 时才会触发错误......

标签: oracle11g triggers


【解决方案1】:

这个逻辑不是倒过来的吗?只有当您在该日期加上 18 年时,您才想要 大于 sysdate 来触发错误......

你去吧.... :)

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    相关资源
    最近更新 更多