为什么此代码在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:“无效字符”
答案 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);