Sql ORACLE-检查日期触发器
为什么此代码在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; 创建
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);