【发布时间】:2020-03-21 05:31:28
【问题描述】:
当我使用 Oracle SQL Developer 中的调试器调试我的 PL/SQL 程序时,为什么工作是永久性的?我希望这项工作最终能够回滚。
【问题讨论】:
标签: oracle plsql oracle-sqldeveloper
当我使用 Oracle SQL Developer 中的调试器调试我的 PL/SQL 程序时,为什么工作是永久性的?我希望这项工作最终能够回滚。
【问题讨论】:
标签: oracle plsql oracle-sqldeveloper
Oracle 会话完成时的默认行为通常是执行 COMMIT。
当您想知道在运行 PL/SQL 时在会话中提交更改时,您还想确保您的 PL/SQL 程序本身不是:
现在,关于调试 PL/SQL 程序。
调试一些 PLSQL,我们执行它。
当您开始调试会话时,您会看到我们用来启动您的程序的匿名 PL/SQL 块。
滚动到底部 -
最后一行
--rollback
并删除 --
现在,当我们的调试会话运行时,在结束会话之前发生的最后一件事就是 ROLLBACK。
现在,让我们演示一个完整的场景。这是一些简单的 PLSQL - 获取 EMPLOYEE_ID 并更新 EMPLOYEES 表,获取该员工的 FIRST_NAME 并将其设为大写。
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;
注意:您可能需要禁用此表上的触发器才能运行。
现在让我们进行调试。我们将使用 EMPLOYEE_ID 101 运行它。我们将看到局部变量设置为什么,以及运行它的 OUT 参数。然后我们会在它运行完成后看到,EMPLOYEE 101 仍然有原来的名字。
Animated GIF demo(抱歉,SO 太大了)
【讨论】: