编写在dept表上更新loc之前触发的触发器,并确保部门中的每个员工获得5%的加薪

时间:2015-04-23 16:04:05

标签: plsql oracle11g oracle-sqldeveloper

使用Scott / tiger帐户如何解决此pl / sql触发器脚本?

写一个在dept表上更新loc之前触发的触发器,并确保部门中的每个员工获得5%的加薪。

2 个答案:

答案 0 :(得分:2)

我绞尽脑汁想着最好的方法。

你看过任何“SAW”电影吗?我也没有,但我们都知道这个前提。我们只是说你应该切断自己的脚而不是做你想做的事。

触发器有两个基本用途。一种是充当高级检查约束,检查数据操作以验证结果是否有效。另一种是记录他们负责的操作。

从不,我不知道我可以在这里强调多少,使用触发器作为嵌入式OK按钮来执行与触发动作完全无关的某些功能。甚至相关。

在您的特定实例中,如果您想要为部门中的每个人提供加薪,请编写脚本或存储过程以使部门中的每个人都加薪 - 后验证用户执行脚本或存储过程具有必要的权限。

假设某个部门需要更改其loc但不要给每个人加薪?假设每个人都发现只是通过改变他们部门的loc,他们会神奇地得到加薪?拍摄,将其更改为奇怪的内容,然后发出另一个update以将其更改回来。繁荣 - 提高10%。

我曾经在一家公司接受采访,而IT经理告诉我“我不允许在任何桌子上使用触发器。”我认为这只是我听过一个据说聪明的人说的最愚蠢的事情。但是,如果他让人们像你提议的那样编写触发器,我想我可以看出他的观点。仍然是一个可怕的过度反应,但至少它将基于一种实际的恐惧。

即使你只是在玩 - 学习如何编写触发器,学习如何正确编写触发器 。不要养成在寻找新工作时不得不忘记的坏习惯。

答案 1 :(得分:0)

创建或替换触发器updateLoc    在更新部门上的loc之前    对于每一行    开始            for nrec in(select * from emp where deptno =:old.deptno)循环            update emp set sal =(nrec.sal * 1.05)其中deptno = nrec.deptno;            结束循环;    结束; /