pl sql触发器如何比较触发器中的列值

时间:2015-03-15 03:18:24

标签: oracle plsql

我想在我的预订表中创建一个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;

实现此触发器的最佳方法是什么。

2 个答案:

答案 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;