【问题标题】:How do I ROLLBACK my Oracle PL/SQL debug session (SQL Developer)如何回滚我的 Oracle PL/SQL 调试会话 (SQL Developer)
【发布时间】:2020-03-21 05:31:28
【问题描述】:

当我使用 Oracle SQL Developer 中的调试器调试我的 PL/SQL 程序时,为什么工作是永久性的?我希望这项工作最终能够回滚。

【问题讨论】:

    标签: oracle plsql oracle-sqldeveloper


    【解决方案1】:

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

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

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

    现在,关于调试 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 太大了)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 2015-09-16
      • 2021-09-11
      • 2013-08-30
      • 2021-09-30
      相关资源
      最近更新 更多