DataSpell 2025.2 Help

调试 Oracle PL/SQL 代码

启用 数据库工具和 SQL 插件

此功能依赖于 数据库工具和 SQL 插件,该插件在 DataSpell 中默认捆绑并启用。 如果相关功能不可用,请确保没有禁用该插件。

  1. Ctrl+Alt+S 打开设置,然后选择 Plugins

  2. 打开 已安装 选项卡,找到 数据库工具和 SQL插件,然后选中插件名称旁边的复选框。

调试器基于 Oracle 探针,使用 DBMS_DEBUG 包的 API,应该可以在 Oracle 服务器 9.0 及以上版本上运行。

在 Oracle 中,您可以调试以下程序单元(PL/SQL 程序):匿名块、包、过程、函数和触发器。

步骤 1。 创建 PL/SQL 对象

  1. 右键点击 Oracle 数据源并选择 新建 | 查询控制台

    或者,从 查询控制台 列表中选择一个现有的控制台 Ctrl+Shift+F10

  2. 请在控制台中键入或粘贴您的代码。

  3. 点击 执行 按钮 “执行”按钮 或按 Ctrl+Enter 以运行该过程代码。

    因此,您会在 数据库 工具窗口(窗口 | 工具窗口 | 数据库 )中看到一个已创建的对象。

创建 PL/SQL 对象

该过程的代码片段:

CREATE PROCEDURE simpleprocedure (inval NUMBER) IS tmpvar NUMBER; tmpvar2 NUMBER; total NUMBER; BEGIN tmpvar := 0; tmpvar2 := 0; total := 0; FOR lcv IN 1 .. inval LOOP total := 2 * total + 1 - tmpvar2; tmpvar2 := tmpvar; tmpvar := total; END LOOP; DBMS_OUTPUT.put_line ('TOTAL IS: ' || total); END simpleprocedure; /

步骤 2。 使用调试选项编译 PL/SQL 对象

要启用 PL/SQL 代码的调试,您需要使用 DEBUG 选项对其进行编译。 编译过程将 PL/SQL 代码转换为 Pro*C,然后编译为 Oracle 共享库。 编译帮助 Oracle 解释器更快地处理您的代码。

  1. 右键点击 您想调试的 PL/SQL 对象,然后选择 SQL 脚本 | 重新编译

  2. 重新编译 对话框中,选择 使用DEBUG 选项

  3. 点击 确定

    编译代码以进行调试

步骤 3。 调试 PL/SQL 程序单元

通过匿名块调试 PL/SQL 过程和函数

PL/SQL 程序单元将代码组织成块。 一个没有名称的块是匿名块。 匿名块不存储在 Oracle 数据库中。 在调试过程中,您使用匿名块来传递参数的值。

要调试过程、包和函数,请编写调用必要程序的匿名块。

  1. 数据库 工具窗口中,双击您 创建编译用于调试的 PL/SQL 对象。

  2. 点击 运行过程 按钮 运行过程按钮。 如果未选择会话,请从列表中选择一个会话。 有关管理会话的更多信息,请参阅 会话

  3. 执行例程 对话框中复制并粘贴匿名块到控制台。

  4. 在匿名块和此匿名块中引用的 PL/SQL 程序对象中放置断点。

  5. (可选)修改参数值。

  6. 点击 调试

该过程的代码片段:

CREATE PROCEDURE simpleprocedure (inval NUMBER) IS tmpvar NUMBER; tmpvar2 NUMBER; total NUMBER; BEGIN tmpvar := 0; tmpvar2 := 0; total := 0; FOR lcv IN 1 .. inval LOOP total := 2 * total + 1 - tmpvar2; tmpvar2 := tmpvar; tmpvar := total; END LOOP; DBMS_OUTPUT.put_line ('TOTAL IS: ' || total); END simpleprocedure; /

通过匿名块调试 PL/SQL 包

程序包是一个模式对象,用于将逻辑上相关的 PL/SQL 类型、项和子程序进行分组。

就像过程和函数一样,要调试包,编写调用必要例程的匿名块。

  1. 数据库 工具窗口中,双击您 创建编译用于调试的包。

  2. 在包中放置断点。

  3. 右键点击 Oracle 数据源并选择 新建 | 查询控制台

    或者,从 查询控制台 列表中选择一个现有的控制台 Ctrl+Shift+F10

  4. 在 Oracle console 中,编写一个匿名块以触发该过程。

  5. 点击 调试

软件包的代码片段:

CREATE PACKAGE PKG_DBGD AS FUNCTION tst_1(I IN INTEGER) RETURN INTEGER; FUNCTION tst_2(I IN INTEGER) RETURN INTEGER; END PKG_DBGD; / CREATE PACKAGE BODY PKG_DBGD AS FUNCTION tst_1(I IN INTEGER) RETURN INTEGER IS BEGIN IF I BETWEEN 5 AND 10 THEN RETURN 2 * I; END IF; IF I BETWEEN 0 AND 4 THEN RETURN tst_2(3 + I); END IF; IF I BETWEEN 6 AND 10 THEN RETURN tst_2(I - 2); END IF; RETURN I; END TST_1; FUNCTION tst_2(I IN INTEGER) RETURN INTEGER IS BEGIN IF I BETWEEN 6 AND 8 THEN RETURN tst_1(I - 1); END IF; IF I BETWEEN 1 AND 5 THEN RETURN I * 2; END IF; RETURN I - 1; END TST_2; END PKG_DBGD; /

匿名代码块的代码片段:

DECLARE V_RESULT INTEGER; BEGIN V_RESULT := PKG_DBGD.tst_1(4); END;

通过查询调试 PL/SQL 触发器

触发器是一个 PL/SQL 程序单元,当您发出 INSERTUPDATEDELETE 查询时,DBMS 会自动调用它。 触发器与表关联,并在插入、更新或删除数据行之前或之后调用。 一个表可以有多个触发器。

要调试触发器,请对表或视图编写一个 INSERTUPDATEDELETE 查询。

  1. 右键点击 Oracle 数据源并选择 新建 | 查询控制台

    或者,从 查询控制台 列表中选择一个现有的控制台 Ctrl+Shift+F10

  2. 在控制台中输入查询。

  3. 在触发器中放置断点。

  4. 点击 调试

触发器的代码片段:

create table Table_with_Triggers ( Code char(1), Name varchar(26) ) / create trigger Table_with_Triggers_Trg_1 before update on Table_with_Triggers declare x positive := 42; begin dbms_output.put_line('trigger before update statement'); end; / create trigger Table_with_Triggers_Trg_2 before update on Table_with_Triggers for each row begin dbms_output.put_line('trigger before update row '||:old.Code); end; / create trigger Table_with_Triggers_Trg_3 after update on Table_with_Triggers for each row begin dbms_output.put_line('trigger after update row '||:old.Code); end; / create trigger Table_with_Triggers_Trg_4 after update on Table_with_Triggers begin dbms_output.put_line('trigger after update statement'); end; / insert into Table_with_Triggers values ('A', 'Altai'); insert into Table_with_Triggers values ('B', 'Barnaul'); commit; alter trigger Table_with_Triggers_Trg_1 compile debug; alter trigger Table_with_Triggers_Trg_2 compile debug; alter trigger Table_with_Triggers_Trg_3 compile debug; alter trigger Table_with_Triggers_Trg_4 compile debug; begin dbms_output.enable(4000); end; / begin update Table_with_Triggers set Name = Name || '+'; end; / update Table_with_Triggers set Name = Name || '+' / rollback / select * from user_source /

单步模式

在调试 PL/SQL 代码时,您可以选择两种单步执行模式: 正常原生

正常 模式中,您可以暂停调试的会话(目标会话),设置和移除断点。 如果没有设置有效的断点,调试器将逐行执行代码。

原生 模式下,调试器使用 Oracle 原生调试命令。 您无法暂停目标会话或管理断点,但在 CPU 密集型操作(包括大量计算和循环的操作)中,您可能会体验到性能提升。 您可以在 官方 Oracle 文档中阅读有关 Oracle 调试命令的更多信息。 如果未设置有效的断点,调试器将执行整个例程。

更改步进模式

  1. 打开设置(Ctrl+Alt+S ),然后导航到 构建、执行、部署 | 调试器 | 步进

  2. 步进模式 列表中选择所需的调试模式。

在可调试代码的开头暂停

您可以强制调试器在可调试代码的开头暂停。 调试器暂停的位置会被自动检测。 如果您在声明部分分配变量值,调试器会在变量声明处暂停。 如果未将值赋予变量,调试器将跳过声明部分并在执行部分的 BEGIN 关键字处暂停。

  1. 打开设置(Ctrl+Alt+S ),然后导航到 构建、执行、部署 | 调试器 | 步进

  2. 请选择 开始时暂停

在可调试代码的开头暂停
最后修改日期: 2025年 9月 27日