使用 Oracle SQL Developer 开发和调试 PL/SQL

本教程向您介绍如何使用 Oracle SQL Developer 创建、运行以及调试 PL/SQL 过程。

大约 30 分钟

主题

本教程包括下列主题:

将鼠标置于此图标上以加载和查看本教程的所有屏幕截图。(警告:因为此操作会同时加载所有屏幕截图,所以网速较慢时,响应时间可能会比较长。)

注:此外,您还可以在下列步骤中将鼠标放在每个单独的图标上,从而仅加载和查看与该步骤相关的屏幕截图。

概述

Oracle SQL Developer 是一个免费的图形工具,可提高工作效率并简化数据库开发任务。利用 Oracle SQL Developer,您可以浏览数据库对象、运行 SQL 语句和 SQL 脚本,以及编辑和调试 PL/SQL 语句。您还可以运行所提供的任何数量的报表,以及创建和保存您自己的报表。本教程集中讨论 PL/SQL 的创建、编译、运行和调试。

返回主题列表

前提条件

开始本教程之前,您应该:

1.

安装 Oracle 数据库 11g

注:您可以使用 9.2.0.1 以上的任何 Oracle 数据库版本

2.

如果您使用的不是 Oracle 数据库 11g,请安装 Oracle SQL Developer 1.2.1。

注:OTN 可以免费下载 Oracle SQL Developer。要安装 Oracle SQL Developer,将其解压缩到计算机上的任一目录。

3.

下载 plsql.zip 并将其解压缩到您的工作目录(即 d:\wkdir)。

4.

可以访问附带的 HR 模式。

如果尚未进行此操作,DBA 用户需要解锁模式以提供访问。使用以下命令可以完成此操作:

ALTER USER hr ACCOUNT UNLOCK;
ALTER USER hr IDENTIFIED BY hr;

返回主题列表

创建数据库连接

要创建数据库连接,请执行以下步骤:

1.

打开 Windows 资源管理器,双击 \sqldeveloper\sqldeveloper.exe

注:如果显示一个对话框窗口,询问您是否想移植早期版本的设置,单击 No

2.

在 Connections 选项卡中,右键单击 Connections 并选择 New Connection

3.

在 Connection Name 域中输入 HR_ORCL(或者标识您的连接的任何其他名称),在 Username 和 Password 域中输入 HR,在 Hostname 域中指定您的 <主机名>,在 SID 域中输入 ORCL。单击 Test

4.

连接状态测试成功,但没有保存连接。要保存连接,单击 Connect

5.

连接已保存,您可以在列表中看到该数据库。展开 HR_ORCL

6.

打开连接时,SQL Worksheet 会自动打开。SQL Worksheet 允许您针对您刚创建的连接执行 SQL。

返回主题列表

浏览数据库

Oracle SQL Developer 中的 Connections 导航器允许您浏览和编辑数据库对象。本教程创建并调试 PL/SQL,使用从 HR 模式中选择的表。在本主题中,您将了解本教程后面部分中将使用的表。执行以下步骤:

1.

展开 Tables 节点。

2.

单击 EMPLOYEES 表,查看表定义。

3.

要查看数据,单击 Data 选项卡。

4.

单击导航器中的 DEPARTMENTS 表。

5.

DEPARTMENTS 表有许多约束。当表定义显示时,选择 Constraints 选项卡。

6.

单击 Edit 图标。

7.

该对话框有多个选项卡,选择 Foreign Keys 选项卡。

查看外键,然后单击 OK

8.

通过在导航器中依次选中 JOBS 和 LOCATIONS 表并查看定义和数据,验证这两个表存在且具有数据。

返回主题列表

创建并编译 PL/SQL 过程

在本主题中,您创建、编辑并编译一个 PL/SQL 过程。执行以下步骤:

1.

在 Connections 导航器中,右键单击 Procedures 节点以调用上下文菜单,然后选择 Create PROCEDURE

2.

输入 EMP_LIST 作为过程名。然后单击 +,添加一个参数。

3.

双击参数,您可以将值更改为 pMaxRows,然后将 VARCHAR2 更改为 NUMBER。确保在单击 OK 之前按了 Enter 键。

4.

随即显示已指定参数的过程的框架。

5.

替换以下 PL/SQL:

BEGIN
  NULL;
END;

使用以下代码:
(此代码还包含在解压缩 plsql.zip 的工作目录(即 d:\wkdir)中的 emp_cursor.sql 文件中)

CURSOR emp_cursor IS
SELECT l.state_province, l.country_id, d.department_name, e.last_name,
j.job_title, e.salary, e.commission_pct
FROM locations l, departments d, employees e, jobs j
WHERE l.location_id = d.location_id
AND d.department_id = e.department_id
AND e.job_id = j.job_id;
emp_record emp_cursor%ROWTYPE;
TYPE emp_tab_type IS TABLE OF emp_cursor%ROWTYPE INDEX BY BINARY_INTEGER;
emp_tab emp_tab_type;
i NUMBER := 1;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO emp_record;
emp_tab(i) := emp_record;
WHILE ((emp_cursor%FOUND) AND (i <= pMaxRows) LOOP
i := i + 1;
FETCH emp_cursor INTO emp_record;
emp_tab(i) := emp_record;
END LOOP;
CLOSE emp_cursor;
FOR j IN REVERSE 1..i LOOP
DBMS_OUTPUT.PUT_LINE(emp_tab(j).last_name);
END LOOP;
END;

注意 Oracle SQL Developer 对保留字的格式设置。要进一步设置代码的格式,单击右键以调用上下文菜单,然后选择 Format SQL...
单击工具栏中的 Save 按钮,编译 PL/SQL 子程序。

6.

在导航器中展开 Procedures

7.

注意,当 Oracle SQL Developer 检测到无效 PL/SQL 子程序时,Connections 导航器中该子程序的图标会以红色的 X 来指示状态。

Log 窗口中显示编译错误。只需双击错误,即可导航到错误中报告的对应行。Oracle SQL Developer 还在右侧边列 (gutter) 中显示错误和提示。如果您将鼠标放在边列中每个红色方块上,将显示错误消息。

在本例中,错误消息指示 LOOP 语句中存在格式错误。仔细检查代码后,您会发现 WHILE 语句中多了一个圆括号。删除多余的圆括号。

8.

单击 Compile 图标。

9.

该过程成功编译。您现在可以运行该过程。

返回主题列表

运行 PL/SQL 过程

创建并编译了一个 PL/SQL 过程之后,您可以使用 Oracle SQL Developer 运行它。执行以下步骤:

1.

在左侧导航器中,右键单击 EMP_LIST 并选择 Run

2.

该操作将调用 Run PL/SQL 对话框。Run PL/SQL 对话框允许您选择要运行的目标过程或函数(对程序包有用),并显示所选目标的参数列表。PL/SQL 块文本区域中包含的是 Oracle SQL Developer 用来调用所选程序的生成代码。您可以使用该区域填充要传送到程序单元的参数以及处理复杂的返回类型。

PMAXROWS := NULL; 更改为 PMAXROWS := 5; 然后,单击 OK

3.

Log 窗口中显示了返回的 5 行结果。

返回主题列表

调试 PL/SQL 过程

Oracle SQL Developer 还支持使用 Oracle 数据库进行 PL/SQL 调试。在本主题中,您调试一个 PL/SQL 过程、单步调试代码并在运行时修改值。执行以下步骤:

1.

通过在 OPEN emp_cursor; 语句所在行对应的代码左侧区中单击,可在 EMP_LIST 过程中设置一个断点。

2.

单击 Debug 图标(瓢虫)。

3.

Debug PL/SQL 对话框应仍显示值 PMAXROWS = 5; 单击 OK

4.

调试器应在您设置断点处暂停。您现在可以控制执行流程、修改变量值以及执行其他调试函数。

注:如果您此时收到错误消息“This session requires DEBUG CONNECT SESSION and DEBUG ANY PROCEDURE user privileges”,您需要完成前提条件中的步骤 4。

5.

单击 Step Into

6.

这将转至光标所在的第一行。再次单击 Step Into

7.

您现在应该选择光标所在的第一行。第 3 次单击 Step Into

8.

单击 Data 选项卡。

9.

Data 窗口开始显示有限的变量列表,这些变量用在要执行的代码行中以及之前执行的代码中。

10.

右键单击 DBMS_OUTPUT.PUT_LINE(emp_tab(j).last_name); 这行,然后选择 Run to Cursor

11.

展开 emp_tab > values > [1] > _value。您会看到表中给定记录中域的值。选择 LAST_NAME 域。

12.

右键单击 LAST_NAME 域并选择 Modify Value

13.

将名称更改为别的内容,单击 OK

14.

单击 Resume 图标 以允许 PL/SQL 运行直至完成。

15.

查看修改后的值是否显示在 Log 窗口中。

在本教程中,您学习了如何:

创建数据库连接

浏览数据库

创建并编译 PL/SQL 过程

运行 PL/SQL 过程

调试 PL/SQL 过程

返回主题列表

将鼠标置于该图标上可以隐藏所有的屏幕截图。