ORACLE - 检查日期触发器

时间:2017-01-29 16:54:04

标签: sql oracle

为什么此代码在ORACLE中不起作用?

CREATE TRIGGER chk_dates
BEFORE INSERT ON `job_history`
FOR EACH ROW
BEGIN
  IF (NEW.end_date < NEW.start_date) THEN
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'end_date cannot be earlier than start_date';
  END IF;
END;

我有一个日志: ORA-00911:“无效字符”

1 个答案:

答案 0 :(得分:2)

您正在将MySQL语法与Oracle混合使用。 Oracle中没有SIGNAL SQLSTATE

在Oracle中,使用raise_application_error引发错误。

BEGIN
  IF (:NEW.end_date < :NEW.start_date) THEN
    raise_application_error(-20001, 'end_date cannot be earlier than start_date');
  END IF;
END;

在这种情况下,您甚至不需要触发器,因为这可以使用这样的检查约束轻松实现:

alter table your_table
add constraint contraint_name check (end_date >= start_date);
相关问题