【问题标题】:Oracle sql trigger that checks old and new table values用于检查新旧表值的 Oracle sql 触发器
【发布时间】:2021-04-04 18:14:37
【问题描述】:

我有一个名为 Employee 的表,其中包含多个字段,其中一个字段是 current_salary。我正在尝试编写一个触发器,以使该字段的新值永远不会小于原始值。我还没有找到相关的例子,而且我是 PL/SQL 的新手。

 CREATE TRIGGER TR_EMPLOYEE_SAL 
    BEFORE UPDATE
    ON EMPLOYEE
    FOR EACH ROW
    BEGIN
        IF :NEW.CURRENT_SALARY > :OLD.CURRENT SALARY THEN
            UPDATE EMPLOYEE
                SET CURRENT_SALLARY = :NEW.CURRENT_SALARY;
        END IF;
    END;
    /

我的理由如下:它必须在进行更改之前检查新值,因此我选择了“之前”。它应该将现有值与更新值进行比较,并且只有在新值高于原始值时才更改它。我显然在这里缺少一些基础知识,所以我需要一些提示。

【问题讨论】:

    标签: sql oracle plsql triggers sql-update


    【解决方案1】:

    应该是

    begin
      :new.current_salary := greatest (:old.current_salary, :new.current_salary);
    end;
    

    为什么?因为 - 在触发器中 - 您不能 update 刚刚更改的表,并且该更改导致触发器触发,因为您将收到 mutating table 错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2020-11-10
      • 2018-09-08
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      相关资源
      最近更新 更多