我想在我的预订表中创建一个ORACLE plsql触发器,这将阻止用户更新预订开始日期的值,如< = sysdate。
在我的预订表中,预订开始日期列名是date_from。我尝试了以下命令,但似乎我使用了错误的代码。
create or replace TRIGGER UPDATE_BOOKING
BEFORE UPDATE ON BOOKING
FOR EACH ROW
BEGIN
IF BOOKING.DATE_FROM <= TO_DATE(SYSDATE)
THEN
RAISE_APPLICATION_ERROR (-20001,'YOU CAN NOT UPDATE BOOKING STATUS WHERE ......');
END IF;
END;
实现此触发器的最佳方法是什么。
答案 0 :(得分:1)
如果您想比较日期的现有值,请使用:old
。如果您还要更新日期列,并且要检查更新日期的新值,请使用:new
。 :old
的示例如下..
create or replace TRIGGER UPDATE_BOOKING
BEFORE UPDATE ON BOOKING
FOR EACH ROW
BEGIN
IF :OLD.DATE_FROM <= TO_DATE(SYSDATE)
THEN
RAISE_APPLICATION_ERROR (-20001,'YOU CAN NOT UPDATE BOOKING STATUS WHERE ......');
END IF;
END;
答案 1 :(得分:1)
不需要为sysdate使用to_date()函数,它已经是日期类型,请检查以下代码:
create or replace TRIGGER UPDATE_BOOKING
BEFORE UPDATE ON BOOKING
FOR EACH ROW
BEGIN
-- used trunc function below for more accuracy
IF trunc(:OLD.DATE_FROM) <= trunc(SYSDATE)
THEN
RAISE_APPLICATION_ERROR (-20001,'YOU CAN NOT UPDATE BOOKING STATUS WHERE ......');
END IF;
END;