Sql ORACLE-检查日期触发器

Sql ORACLE-检查日期触发器,sql,oracle,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; 创建

为什么此代码在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;
创建触发器chk\u日期
在“工作记录”中插入之前`
每行
开始
如果(NEW.end_date
我有一个日志:
ORA-00911:“无效字符”

您将MySQL语法与Oracle混合使用。Oracle中没有
信号SQLSTATE

在Oracle中,使用
raise\u application\u 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;
您在中的何处找到信号sqlstate
?你为什么要用扳机呢?一个简单的检查约束就可以了。另外:
`job\u history`
在SQL(和Oracle)中是无效的标识符
alter table your_table
add constraint contraint_name check (end_date >= start_date);