【发布时间】:2013-02-06 06:42:05
【问题描述】:
我在hr 架构中有一个名为employee 的表,我需要在此表上创建行级触发器,以便每当我尝试更新员工表上的薪水时,我确保不会减少薪水!
我试过这个,但我得到一个错误:
错误报告:ORA-01748:此处仅允许简单的列名 01748。 00000 - "这里只允许简单的列名
CREATE or REPLACE TRIGGER salary_dec_trigger
BEFORE UPDATE OF emp.salary
ON emp
FOR EACH ROW
BEGIN
if(:new.salary>:old.salary)
then
update emp set emp.salary=emp.salary+:new.salary where emp.employee_id=:new.employee_id;
else
rollback;
end if;
END;
/
【问题讨论】:
-
你能解释一下“不能得到好的结果”是什么意思吗?
-
我的意思是我遇到了运行时错误,伙计。错误报告:ORA-01748:此处只允许简单的列名 01748。00000 -“此处只允许简单的列名” *原因:*操作:
-
只指定列名
salary,而不是限定列名emp.salary。同样适用于employee_id -
是的,我也试过这个,伙计......现在它已经编译了,但是,当我尝试更新薪水时,它给出了错误!is:错误报告:SQL 错误:ORA-04091:表 HR。 EMP 正在变异,触发器/函数可能看不到它 ORA-06512:在“HR.SAL_UPDATE”,第 5 行 ORA-04088:执行触发器 'HR.SAL_UPDATE' 04091 期间出错。00000 - “表 %s.%s 是变异,触发器/函数可能看不到它”
-
这很棘手。您可以尝试使用
after触发器而不是before因为在您的情况下它正在尝试读取尚未更新的列值salary。
标签: oracle plsql triggers oracle11g