gpt4 book ai didi

显示工资变化的 SQL 触发器

转载 作者:行者123 更新时间:2023-12-02 04:41:11 27 4
gpt4 key购买 nike

我正在尝试在 sql developer 中创建一个简单的触发器,以在工资发生变化时显示工资的变化

CREATE OR REPLACE TRIGGER salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON FACULTY
FOR EACH ROW

DECLARE
sal_diff NUMBER;

BEGIN
sal_diff := :NEW.F_SALARY - :OLD.F_SALARY;

DBMS_OUTPUT.PUT_LINE('Difference: ' || sal_diff);
END;

当我尝试运行触发器时,它提示输入新旧绑定(bind),当我尝试运行更新以查看它是否有效时,它提示触发器失败。那么我是如何错误地使用旧标签和新标签的呢?或者这不是问题

最佳答案

您的代码存在多个问题。

  1. 您需要创建一个后触发器而不是前触发器。

  2. 您正在尝试编写一个触发器来执行一个操作 插入、删除或更新。所以你应该做条件检查 (例如如果插入、删除或更新)子句。

  3. 此外,当您删除时,没有新值,只有旧值值(value)。

我会如下更改您的触发器..

CREATE OR REPLACE TRIGGER salary_changes
AFTER DELETE OR INSERT OR UPDATE ON FACULTY
FOR EACH ROW

DECLARE
sal_diff NUMBER;
BEGIN
If (INSERTING or UPDATING) then
sal_diff := :NEW.F_SALARY - :OLD.F_SALARY;
DBMS_OUTPUT.PUT_LINE('Difference: ' || sal_diff);
END IF;

IF DELETING THEN
DBMS_OUTPUT.PUT_LINE('The deleted value is:' || :OLD.F_SALARY);
END IF;
END;

关于显示工资变化的 SQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37370399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com