当我使用Oracle SQL Developer中的调试器调试我的PL / SQL程序时,为什么工作会永久完成?我希望工作最后回滚。
通常,Oracle会话完成时的默认行为是执行COMMIT。
当想知道在运行PL / SQL时在会话中提交更改时,您还想确保您的PL / SQL程序本身不是:
现在,关于调试PL / SQL程序。
调试一些PLSQL,我们执行它。
当您开始调试会话时,您将看到我们用来启动程序的PL / SQL匿名块。
滚动到底部-
最后一行
--rollback
并删除-
现在,当我们的调试会话运行时,在结束会话之前发生的最后一件事是ROLLBACK。
现在,让我们演示一个完整的场景。这是一些简单的PLSQL-接收一个EMPLOYEE_ID并使用该员工的FIRST_NAME并将其设置为大写来更新EMPLOYEES表。
create or replace procedure upper_EMP_NAME (
EMP_ID_IN in number,
EMP_NAME_OUT out varchar2
) as
new_name varchar2(50);
begin
select upper(FIRST_NAME)
into new_name
from EMPLOYEES
where EMPLOYEE_ID = EMP_ID_IN;
update employees set first_name = new_name
where EMPLOYEE_ID = EMP_ID_IN;
emp_name_out := new_name;
end upper_EMP_NAME;
注意:您可能需要禁用此表上的TRIGGER才能运行。
现在让我们进行调试。我们将使用EMPLOYEE_ID 101运行它。我们将看到本地变量设置为什么,以及运行它的OUT参数。然后,在运行完成后,我们将看到EMPLOYEE 101仍然具有原始的名字。
Animated GIF demo(抱歉,SO太大了)