从同一表触发选择

Laj*_*pad 2 rdbms triggers

我想问一个关于触发器的问题。假设我有一个表T,并且在更新之前需要一个触发器。但是,我有一个问题。我需要使用触发器中T的其他行来检查条件。我的问题是:哪个RDBMS支持此功能?在哪里可以触发触发器的触发器在同一张表上编写执行选择的触发器。例如:

CREATE TRIGGER updtrigger BEFORE UPDATE ON Employee
    -> FOR EACH ROW
    -> BEGIN
    -> IF NEW.Salary<=500 THEN
    -> SET NEW.Salary=10000;
    -> ELSEIF NEW.Salary>500 and NEW.Salary < 600 THEN
    -> SET NEW.Salary=15000;
    -> ELSEIF NEW.Salary > (select MAX(Salary) from Employee)
    -> Set NEW.Salary = 601;
    -> END IF;
    -> END
    -> //
Run Code Online (Sandbox Code Playgroud)

谢谢,

最好的祝福,

Lajos Arpad。

Laj*_*pad 5

例如,给定的触发器将在Oracle中引发Mutating table异常,但是在Oracle中有一个解决方案,例如,允许此触发器并且它可以正常工作:

CREATE or replace TRIGGER updtrigger BEFORE UPDATE ON Employees
     FOR EACH ROW
DECLARE
 pragma autonomous_transaction;
 n number;
     BEGIN
     select MAX(Salary) into n from Employees;
     IF :NEW.Salary<=500 THEN
          DBMS_OUTPUT.PUT_LINE('kisebb mint 500');
          :NEW.salary:=n;
    end if;
commit;
     END;
Run Code Online (Sandbox Code Playgroud)