调试 Oracle PL/SQL 代码
最后修改时间:2023 年 9 月 20 日启用数据库工具和 SQL 插件
此功能依赖于数据库工具和 SQL 插件,默认情况下,它们在 PyCharm 中捆绑并启用。如果相关功能不可用,请确保您没有禁用该插件。
笔记
数据库工具和 SQL 插件仅在 PyCharm Professional 中可用。
按打开 IDE 设置,然后选择插件。CtrlAlt0S
打开已安装选项卡,找到数据库工具和 SQL插件,然后选中插件名称旁边的复选框。
该调试器基于使用 DBMS_DEBUG 包的 API 的 Oracle Probe,并且应该在 Oracle 服务器 9.0 及更高版本上运行。
在 Oracle 中,您可以调试以下程序单元(PL/SQL 程序):匿名块、包、过程、函数和触发器。
步骤 1. 创建 PL/SQL 对象
右键单击 Oracle 数据源并选择新建 | 查询控制台。
或者,从查询控制台列表 ( )选择现有控制台之一。CtrlShiftF10
在控制台中输入或粘贴您的代码。
单击“执行”按钮或按运行过程代码。CtrlEnter
结果,您会在 数据库工具窗口(视图 | 工具窗口 | 数据库)中看到创建的对象。
该过程的代码片段:
CREATE PROCEDURE simpleprocedure (inval NUMBER)
{...}
步骤 2. 使用调试选项编译 PL/SQL 对象
要启用 PL/SQL 代码的调试,您需要使用该DEBUG
选项对其进行编译。编译过程将 PL/SQL 代码转换为 Pro*C,然后编译为 Oracle 共享库。编译有助于 Oracle 解释器更快地处理您的代码。
右键单击要调试的 PL/SQL 对象,然后选择SQL 脚本 | 重新编译。
在“重新编译”对话框中,选择“使用调试”选项。
单击“确定”。
步骤 3. 调试 PL/SQL 程序单元
通过匿名块调试 PL/SQL 过程和函数
PL/SQL 程序单元将代码组织成块。没有名称的块是匿名块。匿名块不存储在 Oracle 数据库中。在调试过程中,您使用匿名块来传递参数值。
要调试过程、包和函数,请编写一个调用必要例程的匿名块。
单击“运行过程”按钮。如果未选择会话,请从列表中选择一个会话。有关管理会话的更多信息,请参阅会话。
从“执行例程”对话框中,将匿名块复制并粘贴到控制台。
将断点放置在匿名块以及该匿名块中引用的 PL/SQL 程序对象中。
(可选)修改参数值。
单击“调试”。
该过程的代码片段:
CREATE PROCEDURE simpleprocedure (inval NUMBER)
{...}
通过匿名块调试 PL/SQL 包
包是一个模式对象,它对逻辑上相关的 PL/SQL 类型、项和子程序进行分组。
就像过程和函数一样,要调试包,请编写调用必要例程的匿名块。
在包中放置断点。
右键单击 Oracle 数据源并选择新建 | 查询控制台。
或者,从查询控制台列表 ( )选择现有控制台之一。CtrlShiftF10
在 Oracle 控制台中,编写触发该过程的匿名块。
单击“调试”。
包的代码片段:
CREATE PACKAGE PKG_DBGD AS
{...}
匿名块的代码片段:
DECLARE
{...}
通过查询调试 PL/SQL 触发器
触发器是一个 PL/SQL 程序单元,当您发出 INSERT、UPDATE 或 DELETE 查询时,DBMS 自动调用它。触发器与表关联,并在插入、更新或删除数据行之前或之后调用。一个表可以有多个触发器。
要调试触发器,请将 INSERT、UPDATE 或 DELETE 查询写入表或视图。
右键单击 Oracle 数据源并选择新建 | 查询控制台。
或者,从查询控制台列表 ( )选择现有控制台之一。CtrlShiftF10
在控制台中键入查询。
在触发器中放置断点。
单击“调试”。
触发器的代码片段:
create table Table_with_Triggers
{...}
步进模式
调试 PL/SQL 代码时,可以在两种步进模式之间进行选择:Graceful和Native。
在优雅模式下,您可以暂停正在调试的会话(目标会话)、设置和删除断点。如果未设置有效断点,调试器将逐行单步执行代码。
在本机模式下,调试器使用 Oracle 本机调试命令。您无法暂停目标会话或管理断点,但您可能会在 CPU 密集型操作(包含大量计算和循环的操作)中体验到性能的提升。您可以在Oracle 官方文档中阅读有关 Oracle 调试命令的更多信息。如果未设置有效断点,调试器将执行整个例程。
改变步进模式
打开设置 ( ) 并导航至“构建、执行、部署”| 调试器| 迈步。CtrlAlt0S
从步进模式列表中,选择您需要的步进模式。
在可调试代码的开头暂停
您可以强制调试器在可调试代码的开头暂停。自动检测调试器暂停的位置。如果在声明部分分配变量值,调试器将在变量声明处暂停。如果没有为变量赋值,调试器将跳过声明部分并BEGIN
在执行部分的关键字处暂停。
打开设置 ( ) 并导航至“构建、执行、部署”| 调试器| 迈步。CtrlAlt0S
选择开始时暂停。
感谢您的反馈意见!