调试 Oracle PL/SQL 代码
调试器基于使用 DBMS_DEBUG 包的 API 的 Oracle Probe,并且应该在 Oracle 服务器 9.0 及更高版本上工作。
在 Oracle 中,您可以调试以下程序单元(PL/SQL 程序):匿名块、包、过程、函数和触发器。
步骤 1. 创建 PL/SQL 对象
右键单击 Oracle 数据源并选择Open Console Ctrl+Shift+F10。
在控制台中键入或粘贴您的代码。
单击执行按钮或按下Ctrl+Enter以运行程序代码。
因此,您会在数据库工具窗口( )中看到一个创建的对象。
步骤 2. 使用调试选项编译 PL/SQL 对象
要启用 PL/SQL 代码的调试,您需要使用该debug
选项对其进行编译。编译过程将 PL/SQL 代码转换为 Pro*C,然后编译为 Oracle 共享库。编译有助于 Oracle 解释器更快地处理您的代码。
右键单击要调试的 PL/SQL 对象并选择
。在Recompile对话框中,选择With "debug" option。
单击确定。
步骤 3. 调试 PL/SQL 程序单元
通过匿名块调试 PL/SQL 过程和函数
PL/SQL 程序单元将代码组织成块。没有名称的块是匿名块。匿名块不存储在 Oracle 数据库中。在调试过程中,您使用匿名块来传递参数值。
要调试过程、包和函数,请编写一个调用必要例程的匿名块。
在Database工具窗口( )中,双击您为调试而创建和编译的 PL/SQL 对象。
单击运行过程按钮。如果未选择会话,请从下拉列表中选择一个会话。有关管理会话的更多信息,请参阅管理连接会话。
在Execute Routine对话框中,单击Open in console图标 ( ) 以在 Oracle 控制台中打开匿名块。或者,您可以手动将匿名块复制并粘贴到控制台。
在匿名块和在这个匿名块中引用的 PL/SQL 程序对象中放置断点。
(可选)修改参数值。
单击调试。
通过匿名块调试 PL/SQL 包
包是对逻辑相关的 PL/SQL 类型、项和子程序进行分组的模式对象。
就像使用过程和函数一样,要调试包,编写调用必要例程的匿名块。
在包中放置断点。
右键单击 Oracle 数据源并选择Open Console Ctrl+Shift+F10。
在 Oracle 控制台中,编写一个触发该过程的匿名块。
单击调试。
通过查询调试 PL/SQL 触发器
触发器是一个 PL/SQL 程序单元,当您发出 INSERT、UPDATE 或 DELETE 查询时,DBMS 会自动调用它。触发器与表相关联,并在您插入、更新或删除数据行之前或之后调用。一个表可以有多个触发器。
要调试触发器,请将 INSERT、UPDATE 或 DELETE 查询写入表或视图。
右键单击 Oracle 数据源并选择Open Console Ctrl+Shift+F10。
在控制台中键入查询。
在触发器中放置断点。
单击调试。
步进模式
调试 PL/SQL 代码时,您可以在两种步进模式之间进行选择:Graceful和Native。
在优雅模式下,您可以暂停您调试的会话(目标会话),设置和删除断点。如果没有设置有效的断点,调试器将逐行逐行执行代码。
在本机模式下,调试器使用 Oracle 本机调试命令。您无法暂停目标会话或管理断点,但您可能会在 CPU 密集型操作(包括大量计算和循环的操作)中体验到性能提升。您可以在 Oracle官方文档中阅读有关 Oracle 调试命令的更多信息。如果没有设置有效断点,调试器将执行整个例程。
改变步进模式
打开设置 ( Ctrl+Alt+S) 并导航到
。从步进模式列表中,选择您需要的步进模式。
在可调试代码的开头暂停
您可以强制调试器在可调试代码的开头暂停。自动检测调试器暂停的地方。如果在声明部分分配变量值,调试器会在变量声明处暂停。如果没有为变量赋值,调试器会跳过声明部分并在BEGIN
执行部分的关键字处暂停。
打开设置 ( Ctrl+Alt+S) 并导航到
。选择开始时暂停。