我写了一个程序如下
Create or replace procedure raise_salary(
v_id IN emp.empno%TYPE) AS
Begin
update emp
set sal = sal*1.10
where empno=v_id;
commit;
End;
我意识到我没有创建一个例外来回滚该值。 我想回到原来的价值。因为我得到以下错误,所以不能减少该值。 ORA-20187:工资不能减少
如何返回原始值。我已经放弃了程序但是现在因为我已经执行了它,它已经增加了它。现在似乎是固定值。我该怎么办?
答案 0 :(得分:1)
删除程序与撤消运行它的效果完全无关。
听起来桌子上有一个触发器阻止你进行你想要做的更新。一种选择是禁用触发器。更新中的错误堆栈应告诉您其名称。你可以执行ALTER TRIGGER <triggername> DISABLE
,然后运行你的更新,然后`ALTER TRIGGER ENABLE&#39;。
另一种可能的解决方法是将行插入第二个表,在那里更新,然后删除并重新插入原始表中。如果某人试图阻止在桌面上插入或删除,这也可能与触发器发生冲突。
这都假设您处于绕过其他人实施的逻辑控制的环境中。据推测,触发器存在是有原因的。
答案 1 :(得分:0)
select trigger_name from user_triggers where table_name='EMP'
将显示您要回滚的表的触发器名称。然后像之前的答案节目一样禁用它们不要忘记让他们回来。
Begin
For cur in (select trigger_name from user_triggers where tbale_name='EMP') loop
Execute immediate 'alter trigger'||cur.trigger_name||' disable';
Update emp set ....your update DML;
Execute immediate 'alter trigger'||cur.trigger_name||' enable';
end loop;
End;
我希望,它会帮助你。