本教程介绍如何通过 Visual Studio 调试 Oracle PL/SQL。
大约 30 分钟
本教程包括下列主题:
| 概述 | ||
| 添加连接 | ||
| 授予调试权限 | ||
| 创建 PL/SQL 程序包和程序包主体 | ||
| 在 Visual Studio .NET 中创建项目 | ||
| 配置调试环境 | ||
| 设置断点 | ||
| 调试 PL/SQL | ||
| 总结 | ||
将鼠标置于此图标上可以加载和查看本教程的所有屏幕截图。
(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)
注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。可以通过单击各个屏幕截图来将其隐藏。
利用 ODT 10.2.0.2 中新的、集成的 PL/SQL 调试程序,您仍然可以在 Visual Studio 内部对 .NET 和 Oracle 解决方案进行端到端的调试。现在,您可以在 Visual Studio 环境中按照调试 C# 或 VB.NET 代码的方式调试 PL/SQL 代码,例如过程和函数(独立的和程序包的)、对象方法和触发器。通过 ODT 集成的 PL/SQL 调试程序,您可以使用传统的调试特性,例如设置断点、查看和修改变量值以及检查调用堆栈。
可以在以下三种模式中的一种模式下使用 PL/SQL 调试程序:
在本教程中,您将使用多层应用程序模式。在该模式下,您可以作为开发人员在调试会话时同时使用 .NET 和 PL/SQL 代码。
开始创建应用程序之前,您应打开 Visual Studio 并创建连接。执行以下步骤:
| 1. |
选择 开始 > 程序 > Microsoft Visual Studio 2005 > Microsoft Visual Studio 2005。 |
|
| 2. |
选择 View > Server Explorer。
|
|
| 3. |
右键单击 Data Connections 并选择 Add Connection...。
|
|
| 4. |
在 Add Connection 对话框中,首先选择相应的数据源提供程序。 注: 如果数据源已设为 Oracle 数据库服务器 (Oracle ODP.NET),则继续下一步或单击 Change 选择数据提供程序。
在 Change Data Source 对话框中,选择 Oracle Database Server 作为 Data Source,并选择 Oracle Data Provider for .NET 作为 Data Provider。单击 OK。
|
|
| 5. |
在数据源名下拉菜单中,选择 Oracle 数据库实例的
|
|
| 5. |
测试连接成功。单击 OK。
|
|
| 6. |
单击 OK。
|
|
| 7. |
HR 连接已创建。同样,您还需创建一个 SYSTEM 连接。右键单击 Data Connections 并选择 Add Connection...。
|
|
| 8. |
数据源提供程序应设为 Oracle 数据库服务器 (Oracle ODP.NET)。在数据源名下拉菜单中,选择 Oracle 数据库实例的 输入 SYSTEM 作为用户名并输入系统口令,单击 Save password,选择 SYSDBA 作为 Role,然后单击 Test connection。
|
|
| 9. |
测试连接成功。单击 OK。
|
|
| 10. |
单击 OK。
|
|
| 11. |
SYSTEM 连接已创建。展开 hr.ORCL 和 SYSTEM.ORCL 以建立连接。
|
|
您需要首先准许调试连接会话并调试 HR 用户的任一过程,然后才能使用调试程序。执行以下步骤:
| 1. |
在 Server Explorer 面板中, 右键单击 SYSTEM.ORCL 连接并选择 Query Window。
|
|
| 2. | 输入下列命令,然后单击 Execute。 GRANT debug any procedure, debug connect session TO hr;
注:如果使用的是 Oracle 数据库版本 9.2,则应该执行 grant debug any procedure to hr; |
|
| 3. | 该语句成功执行。
|
|
在本主题中,您将创建一个 PL/SQL 程序包和程序包主体以确定 PL/SQL 数组中的每个数字是否是质数,然后在 JOBS 表中使用 PL/SQL 记录创建一个新行。执行以下步骤:
| 1. |
在 Server Explorer 面板中,右键单击 HR.ORCL 连接并选择 Query Window。
|
|
| 2. | 复制以下代码并将其粘贴到查询窗口中,然后单击 Execute。 CREATE OR REPLACE PACKAGE "HR"."OBE" IS
-- types for associative arrays that client will pass as arguments
TYPE "T_IN_VALUES" IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
TYPE "T_OUT_VALUES" IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
-- procedure that accepts two associative arrays
-- determines if an element is likely prime and
-- sets value in output array
PROCEDURE "DETERMINE_PRIMES" ("P_IN_VALUES" IN T_IN_VALUES,
|
|
| 3. | PL/SQL 程序包成功执行。
|
|
| 4. | 复制以下代码并将其粘贴到查询窗口中,然后单击 Execute。 CREATE OR REPLACE PACKAGE BODY "HR"."OBE" IS
|
|
| 5. | PL/SQL 程序包主体成功执行。
|
|
| 6. |
在 Server Explorer for the HR.ORCL Connection 中,展开 Packages > OBE 查看已创建对象的列表。
|
|
| 7. | 右键单击 OBE 程序包并选择 Compile Debug。该操作将启用程序包的调试。
|
|
| 8. | 该程序包成功编译。关闭 Output 窗口。然后,单击 Start Page 选项卡。
|
|
现在您可以新建一个项目。执行以下步骤:
| 1. | 在 Create 旁边的 Recent Projects 区域中:选择 Project...。
|
|
| 2. | 接受默认的项目类型 Visual C#,选择模板 Console Application,在 Name 中输入 plsqldebugobe1,并在位置字段中输入存储文件的目录(注意:如果该目录不存在,将创建该目录)。然后单击 OK。
|
|
| 3. | 项目创建成功。现在,您可以添加引用。
|
|
| 4. | 选择 Project > Add Reference...
|
|
| 5. | 向下滚动 References 列表,选择 Oracle.DataAccess 并单击 OK。
|
|
| 6. | 复制以下代码并将其粘贴到 Visual Studio 的 Program.cs 窗口中。右键单击 Program.cs 选项卡,选择 Save Program.cs。 using System;
|
|
您需要首先配置几个属性和选项,然后才能使用调试环境。执行以下步骤:
| 1. | 选择 Project > plsqldebugobe1 Properties...
|
| 2. | 选择 Debug。
|
| 3. | 取消选择 Enable the Visual Studio hosting process,右键单击 plsqldebugobe1 选项卡并选择 Save Selected Items。
|
| 4. | 选择 Tools > Options...。
|
| 5. |
向下滚动并展开 Oracle Developer Tools。选择 PL/SQL Debugging。在 Available 数据库连接中,单击 HR.ORCL 连接前面的复选框。 注意,您将看到 TCP/IP 端口范围。在 PL/SQL 调试期间,Oracle 数据库通过该范围内一个随机端口上的 TCP/IP 连接到 Visual Studio。确保该范围代表您计算机上的开放端口并且防火墙没有阻止这些端口。 单击 OK。
|
| 6. | 选择 Tools > Oracle Application Debugging。
如果再次选择 Tools > Oracle Application Debugging,应该看到该菜单项前面有一个复选标记。
|
在本主题中,您将在 C# 和 PL/SQL 代码中设置一些断点以在执行期间停止调试程序。执行以下步骤:
| 1. | 单击 Program.cs 选项卡并找到 cmd.ExecuteNonQuery() 语句。
|
| 2. | 在 Program.cs 代码中的 cmd.Parameters.Add(p_out_values) 语句处,创建一个断点。单击该行的任意位置,右键单击并选择 Breakpoint,然后选择 Insert Breakpoint。或者,在要设置断点的位置单击代码窗口最左侧的灰色边缘。
|
| 3. | 将显示断点指示器。
|
| 4. | 执行程序包后,创建另一个断点。
|
| 5. | 在 Oracle Explorer 中,双击 DETERMINE_PRIMES 打开该代码。
|
| 6. | 在 DETERMINE_PRIMES 过程的 BEGIN 语句后的第一个语句处创建一个断点。
|
| 7. | 从过程列表中选择 ADD_NEW_JOB。
|
| 8. | 在 BEGIN 语句后的第一个语句处创建一个断点。
|
| 9. | 单击 Program.cs 选项卡。
|
在本主题中,您将使用调试程序来执行程序。执行以下步骤:
| 1. | 现在,您准备调试程序。选择 Debug > Start Debugging..。
|
| 2. | 调试程序在第一个断点处停止。要查看变量及其值,单击窗口底部的 Local 选项卡。查看该断点之前的代码,了解数组绑定参数是如何设置的。
|
| 3. | 要移动到下一行,单击 Step Over 图标。
|
| 4. | 现在,您位于执行 PL/SQL 过程的语句。单击 Step Over 图标。
|
| 5. | 下一个断点到达 DETERMINE_PRIMES 过程。注意,P_IN_VALUES 是一个长度为 10 的数组,因此该循环将执行 10 次。单击 Continue 图标若干次,查看 Local 窗口中值的更改。
|
| 6. | 单击 Locals 窗口中 P_IN_VALUES 变量名旁边的 + 图标,查看输入数组的内容。这是从 C# 应用程序传递到该存储过程的值的数组。继续在代码中停留一段时间。还可以展开 P_OUT_VALUES 数组,观察该数组是否已由此存储过程最终返回的值填充。
|
| 7. | 单击右下窗口中的 Call Stack 选项卡。通过检查调用堆栈,您可以在执行程序时确定到当前点的代码路径。
|
| 8. | 禁用该断点以便程序继续到下一个断点。右键单击该断点并选择 Disable Breakpoint。您还可以直接单击红色圆圈断点图标,删除该断点。
|
| 9. | 单击 Continue 图标,让程序继续执行到下一个断点。
|
| 10. | 代码执行逻辑以生成向用户显示的内容。单击 Step Over 若干次。
|
| 11. | 再次单击 Continue 图标,转到下一个断点。
|
| 12. | 到达 ADD_NEW_JOB 过程断点。
|
| 13. | 如果要查看 JOBS_REC PL/SQL 记录全局变量,您需要创建一个监视。选择 JOBS_REC 并右键单击,然后选择 Add Watch。然后,选择窗口底部的 Watch 选项卡。
|
| 14. | Watch 窗口是 Visual Studio 中的一个内置窗口,通过该窗口,您可以检查特定的程序变量。展开 JOBS_REC Watch。
|
| 15. | 单击 Step Over 4 次以查看填充的 Watch。然后,单击 Continue。
|
| 16. | 程序完成执行后,将显示结果。
|
在本教程中,您学习了如何:
| 添加到数据库的连接并授予调试权限 | ||
| 创建程序包和程序包主体 | ||
| 创建项目并配置调试环境 | ||
| 调试 PL/SQL | ||