在oracle sql中反转提交值

时间:2015-04-19 02:26:28

标签: oracle plsql

我写了一个程序如下

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:工资不能减少

如何返回原始值。我已经放弃了程序但是现在因为我已经执行了它,它已经增加了它。现在似乎是固定值。我该怎么办?

2 个答案:

答案 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;

我希望,它会帮助你。