目的

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

概述

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

创建数据库连接

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

1.打开SQL Developer。

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

3.输入以下信息并单击 Test

Connection Name:hr_orcl
Username:hr
Password:hr
选中 Save Password 复选框
Hostname:localhost
Port:1521
SID:orcl

4.连接状态测试成功,但尚未保存连接。要保存连接,单击 Connect

5.保存该连接后,您可以在列表中看到该数据库。建立连接时,会自动打开一个 SQL Worksheet。在这个 SQL Worksheet 中,您可通过刚创建的连接执行 SQL。展开 hr_orcl 连接。

浏览数据库

您可通过 Oracle SQL Developer 中的 Connections 选项卡下的导航区来浏览和编辑数据库对象。本教程创建并调试 PL/SQL,使用 HR 模式中的多个表。在本主题中,您将查看本教程后面部分中将使用的表。执行以下步骤:

1.展开 Tables 节点。

2.单击 EMPLOYEES 表,查看表定义。

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

4.将显示 Employee 数据。单击导航器中的 DEPARTMENTS 表。

5.DEPARTMENTS 表有许多约束。选择 Constraints 选项卡。

6.单击 Edit 图标。

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

查看外键,然后单击 OK

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

创建并编译 PL/SQL 过程

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

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

2.输入 EMP_LIST 作为过程名。然后单击 + 添加一个参数。双击该参数名,您可以将其值更改为 pMaxRows,然后将 VARCHAR2 更改为 NUMBER。单击 OK

3.创建了该过程。

如果 Grants 选项卡处于活动状态,单击 Code 选项卡。

4.将以下 PL/SQL:

BEGIN
  NULL;
END EMP_LIST;
替换为以下代码:
CREATE OR REPLACE PROCEDURE emp_list (
    pmaxrows IN NUMBER
) AS

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;  -- emp_record的表类型与emp-crusor一致
    -- type  numbers  is table of number index by binary_integer;
    -- 其作用是,加了”index by binary_integer ”后,numbers类型的下标就是自增长
    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 子程序。

5.如果有任何编译错误,就会显示出来。

6.在导航其中展开 Procedures,可以看到 EMP_LIST。

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

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

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

8.单击 Compile for Debug 图标。

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

注意:如果您在 procedures 节点下该过程的图标上仍看到红色的 X,请单击刷新图标。图标上覆盖的绿色表明该过程已为调试而编译。如果图标上没有覆盖其他颜色,则意味着该过程已经过编译但不带有调试指令。这些是由首选设置和编译下拉列表选项控制的。SQL Developer 中的默认配置为“Compile for Debug”。

运行 PL/SQL 过程

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

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

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

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

3.在 Running - Log 窗口中显示结果。

调试 PL/SQL 过程

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

1.为了有助于调试,可在 Code 窗口中添加行号。单击边框,会出现 Toggle Line Numbers 提示。选择该选项。

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

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

4.如果未显示 Log 选项卡,则单击该选项卡。

5.调试器应在您设置断点处暂停。您现在可以控制执行流程、修改变量值以及执行其他调试函数。单击 Step Into(F7)。

注意:您已被授予了 DEBUG CONNECT SESSION 和 DEBUG ANY PROCEDURE 用户权限,这样在调试时就不会出现以下错误消息了。

如上图片,如果Debug出错,则需要授权,如下图片所示:

 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.选择 Debugging - Log 选项卡。

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

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

总结

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

  • 创建数据库连接
  • 浏览数据库
  • 创建并编译 PL/SQL 过程
  • 运行 PL/SQL 过程
  • 调试 PL/SQL 过程
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐