我如何回滚我的Oracle PL / SQL调试会话(SQL Developer)

问题描述 投票:0回答:1

当我使用Oracle SQL Developer中的调试器调试我的PL / SQL程序时,为什么工作会永久完成?我希望工作最后回滚。

oracle plsql oracle-sqldeveloper
1个回答
0
投票

通常,Oracle会话完成时的默认行为是执行COMMIT。

当想知道在运行PL / SQL时在会话中提交更改时,您还想确保您的PL / SQL程序本身不是:

  1. 在代码中执行COMMIT
  2. 运行任何DDL,例如创建或更改对象-这将导致隐式COMMIT

现在,关于调试PL / SQL程序。

调试一些PLSQL,我们执行它。

当您开始调试会话时,您将看到我们用来启动程序的PL / SQL匿名块。

滚动到底部-

enter image description here

最后一行

--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太大了)

© www.soinside.com 2019 - 2024. All rights reserved.