首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有人能帮我理解一下如何在dbms中编写触发器吗?

问有人能帮我理解一下如何在dbms中编写触发器吗?
EN

Stack Overflow用户
提问于 2016-09-26 11:47:57
回答 1查看 57关注 0票数 0
代码语言:javascript
复制
  Employee(eno, ename, hiredate, salary)
  Project (projID, projName, budget)
  Emp_Proj (eno, ProjID, assignedDate)

编写一个触发器,在更新薪资时计算并打印新旧薪资之间的差额。

我在oracle和mysql中都尝试了下面的语句。但是错误弹出,例如无效的触发器规范。有人能帮我解释一下在dbms中触发器的基本通用语法是什么吗?

代码语言:javascript
复制
    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;
EN

回答 1

Stack Overflow用户

发布于 2016-09-26 17:46:52

在oracle中,你可以用两种方式编写它。此外,您还需要仔细阅读文档。Trigger

检查下面的方法:

1)

代码语言:javascript
复制
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)首选

代码语言:javascript
复制
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的值--这是不允许的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39694423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档