【问题标题】:Can someone help me to understand how to write a trigger in dbms?有人可以帮助我了解如何在 dbms 中编写触发器吗?
【发布时间】:2017-02-03 07:12:45
【问题描述】:
  Employee(eno, ename, hiredate, salary)
  Project (projID, projName, budget)
  Emp_Proj (eno, ProjID, assignedDate)

写一个触发器,在工资更新时计算并打印新旧工资的差值。

我在 oracle 和 mysql 中都尝试了以下语句。 但是会弹出错误,例如无效的触发器规范。 有人可以帮我澄清一下任何 dbms 中触发器的基本常用语法是什么?

    create trigger update_salary_trig
    after insert on Employee
    for each row
    if(new.salary<>old.salary)
    new.salary=new.salary-old.salary
    print new.salary;

【问题讨论】:

  • 兄弟在手册中查找它

标签: mysql oracle11g triggers database-trigger


【解决方案1】:

在 oracle 中,您可以通过 2 种方式编写它。另外你需要仔细阅读文档。Trigger

查看以下方法:

1)

CREATE OR REPLACE TRIGGER update_salary_trig
 AFTER INSERT ON Employee
 FOR EACH ROW  
 declare
 revised_sal number;
 begin   

    If(:new.salary <> :old.salary)  then   
     revised_sal := :new.salary - :old.salary;    
    End if;

   dbms_output.put_line(revised_sal);
  end;  

2) 首选

CREATE TRIGGER update_salary_trig
 AFTER INSERT ON Employee
 FOR EACH ROW  
 when  (new.salary <> old.salary)
 DECLARE
   sal_new number;
 begin   
  sal_new := :new.salary - :old.salary; 
   dbms_output.put_line(sal_new);
  end;  

注意:

您不能通过分配:new.salary := :new.salary - :old.salary; 直接更改:new.salary 的值——这是不允许的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    相关资源
    最近更新 更多