PL/SQL开发工具的使用images.china-pub.com/ebook4715001-4720000/4715002/ch02.pdfT PL/SQL...

22
2 PL/SQL 开发工具的使用 有道是“工欲善其事必先利其器”,选择合适的开发工具,并熟练应用,在 PL/SQL 习与开发中可以起到事半功倍的效果。本章将介绍三种常用的 PL/SQL 开发工具及其使用, 包括: T SQL Plus T Oracle SQL Developer T PL/SQL Developer 2.1 SQL Plus

Transcript of PL/SQL开发工具的使用images.china-pub.com/ebook4715001-4720000/4715002/ch02.pdfT PL/SQL...

  • 第 2 章

    PL/SQL 开发工具的使用

    有道是“工欲善其事必先利其器”,选择合适的开发工具,并熟练应用,在 PL/SQL 学习与开发中可以起到事半功倍的效果。本章将介绍三种常用的 PL/SQL 开发工具及其使用,包括:

    T SQL Plus T Oracle SQL Developer T PL/SQL Developer

    2.1 SQL Plus

    2.1.1 SQL Plus 简介

    SQL Plus 是一个被广泛使用的与 Oracle 数据库交互的命令行工具,可以执行 SQL 语句和PL/SQL 程序。SQL Plus 随 Oracle 数据库服务器或客户端的安装而自动安装。SQL Plus 可以在任何 Oracle 数据库运行的操作系统平台上使用,其使用方法基本相同。

    在 SQL Plus 开发环境中,可以运行 SQL 语句、PL/SQL 程序以及 SQL Plus 命令。

    2.1.2 SQL Plus 的启动与退出

    可以采用命令行方式启动 SQL Plus 工具,也可以采用菜单命令的方式启动 SQL Plus。本小节以 Windows 操作系统为例进行讲解。

    1. 命令行方式启动 SQL Plus用命令行方式启动 SQL Plus 是通过在操作系统的命令提示符界面中执行 sqlplus 命令来实

    Chapter 2

  • 第 2 章 PL/SQL 开发工具的使用   19

    现的。

    (1)打开命令提示符窗口选择“开始→所有程序→附件→命令提示符”命令,或选择“开始”,在“搜索程序和文

    件”文本框中输入“cmd”命令,打开命令提示符窗口。(2)在命令提示符窗口中执行 sqlplus 命令sqlplus 命令适用于任何操作系统平台,其语法为:

    sqlplus [username]/[password][@connect_identifier][NOLOG]

    说明:

    T 如果要在启动 SQL Plus 的同时连接到数据库,则需要输入用户名、密码和连接描述符(数据库的网络服务名)。例如 sqlplus system/tiger@PDBORCL,如图 2-1 所示。

    图 2-1 以 system 用户登录 PDBORCL 数据库

    T 如果要以 sys 用户登录数据库,必须以 SYSDBA 身份登录数据库。例如 sqlplus sys/tiger@PDBORCL AS SYSDBA,如图 2-2 所示。

    图 2-2 以 sys 用户登录 PDBORCL 数据库

    T 如果没有指定连接描述符,则连接到系统环境变量 ORACLE_SID 所指定的数据库,如图 2-3 所示。在 Windows 系统中,环境变量 ORACLE_SID 在注册表中的存储 位 置 为:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1\ORACLE_SID。

    T 如果只是启动 SQL Plus,而不连接到数据库,可以使用 NOLOG 参数。例如 sqlplus / NOLOG,如图 2-4 所示。

  • 20   基 础 篇

    图 2-3 以 system 用户登录 ORACLE_SID 指定数据库

    图 2-4 非登录启动 SQL Plus

    2. 菜单命令方式启动 SQL Plus1)选择“开始→所有程序→ Oracle - OraDb11g_home1 →应用程序开发→ SQL Plus”命

    令,以“管理员身份运行”,打开“SQL Plus”窗口。2)根据提示输入用户名、口令后连接系统默认数据库,如图 2-5 所示。如果要连接非默

    认数据库,需要在“请输入用户名:”提示后,以 [username]/[password][@connect_identifier] 形式进行连接。如果要以 sys 用户登录数据库,还要以 SYSDBA 身份连接。如图 2-6 所示。

    图 2-5 以 system 用户登录默认数据库

    图 2-6 以 sys 用户登录 PDBORCL 数据库

  • 第 2 章 PL/SQL 开发工具的使用   21

    3. 退出 SQL Plus1)在命令提示符窗口中,当不再使用 SQL Plus 时,如果希望返回操作系统,在命令行

    提示符后输入 EXIT 或 QUIT 命令,按回车键即可。2)在 SQL Plus 窗口中,当不再使用 SQL Plus 时,输入 EXIT 命令或 QUIT 命令,退出

    SQL Plus 工具。

    2.1.3 SQL Plus 常用命令

    用户启动 SQL Plus 并登录数据库后,就可以在 SQL Plus 环境中执行 SQL 语句、PL/SQL程序和 SQL Plus 命令了。本节将介绍 SQL Plus 命令的使用。

    1. CONN[ECT]该命令的作用是先断开当前连接,然后建立新的连接。该命令的语法是:

    CONN[ECT] [username]/[password][@connect_identifier]

    例如:

    SQL>CONNECT system/tiger@PDBORCL

    如果要以特权用户的身份连接,必须带 AS SYSDBA 或 AS SYSOPER 选项,如:

    SQL>CONNECT sys/tiger@PDBORCL AS SYSDBA

    2. DISC[ONNECT]该命令的作用是断开与数据库的连接,但不退出 SQL Plus 环境,例如:

    SQL>DISCONNECT

    3. DESC[RIBER]该命令的作用是显示任何数据库对象的结构信息,如图 2-7 所示。

    图 2-7 DESCRIBE 命令的使用

    4. 文本输入与执行命令在 SQL Plus 环境中可以输入的文本包括 SQL 语句、PL/SQL 程序以及 SQL Plus 命令。当

    在 SQL Plus 中输入 SQL 语句或 PL/SQL 程序时,最近输入的一条 SQL 语句或 PL/SQL 程序代码会暂时存放到 SQL 缓冲区中。当执行新的 SQL 语句或 PL/SQL 程序时,会自动清除先前SQL 缓冲区中的内容,并将新的 SQL 语句或 PL/SQL 程序放入缓冲区。因此,在缓冲区被清

  • 22   基 础 篇

    除之前,可以显示、编辑缓冲区中的内容。但是,执行的 SQL Plus 命令并不缓存。(1)SQL 语句的输入与执行输入 SQL 语句后,处理方式有三种,如图 2-8 所示。

    T 在 SQL 语句最后加分号(;),并按回车键,则立即执行该语句。 T 在 SQL 语句输入结束后按回车键,换行后按斜杠(/),则立即执行该语句。 T 在 SQL 语句输入结束后按回车键换行,然后再按回车键,结束语句输入但不执行该语句。

    图 2-8 SQL 语句的输入与执行

    (2)PL/SQL 程序的输入与执行PL/SQL 程序输入后,处理方式有两种,如图 2-9 所示。

    T 如果输入点号(.),则结束输入,但不执行该程序。 T 如果输入斜杠(/),则立即执行该程序。

    图 2-9 PL/SQL 程序的输入与执行

    (3)当输入 SQL Plus 命令后,按回车键,则立即执行该命令。

    5. 行编辑命令可以使用 APPEND、CHANGE、CLEAR BUFFER、DEL、INPUT、LIST 等命令编辑缓

    冲区,但都是以代码行为单位进行编辑,非常不方便,因此 SQL Plus 支持以指定的文本编辑

  • 第 2 章 PL/SQL 开发工具的使用   23

    器来编辑缓冲区。可以在 SQL Plus 中使用“ DEFINE _EDITOR=editor_name”命令定义一个文本编辑器,其中 editor_name 为指定的文本编辑器名称。在 Linux 系统中,该编辑器可以是

    “ vi”;在 VMS 系统中,可以是“ edt”;在 Windows 系统中,可以为“ Notepad”。可以使用DEFINE _EDITOR 命令查看系统默认的编辑器类型。

    指定文本编辑器后,如果缓冲区中有文本信息,就可以在 SQL Plus 中使用 ED[IT] 命令,使用文本编辑器打开缓冲区并进行编辑,如图 2-10 所示。

    在 Windows 7 系统中,必须是以“管理员身份运行”的 SQL Plus,才可以使用文本编辑器编辑 SQL Plus 缓冲区。

    图 2-10 打开“记事本”编辑缓冲区

    在编辑完缓冲区内容后,选择“文件”菜单中的“保存”项,然后关闭记事本编辑器,

    回到 SQL Plus 界面,就可以执行缓冲区中的内容。

    6. 文件操作命令通常,可以将经常执行的 SQL Plus 命令、SQL 语句或 PL/SQL 程序存储到 SQL 脚本文件

    中,然后执行 SQL 脚本文件。使用 SQL 脚本文件一方面可以降低命令输入量,另一方面则可以避免输入错误。SQL Plus 对 SQL 脚本文件的操作包括脚本文件的创建、文件的装载、编辑和执行。

    (1)创建脚本文件可以使用 SAVE 命令将 SQL 缓冲区内容保存到一个 SQL 脚本文件中,文件的默认扩展名

    为 .SQL。语法为:

    SAVE filename [CREATE]|[REPLACE]|[APPEND]

    T 如果由 filename 指定的文件不存在,则创建该文件,默认参数为 CREATE。 T 如果要覆盖已存在的文件,需要使用参数 REPLACE。 T 如果要在已存在的文件中进行内容追加,需要使用参数 APPEND。

    SAVE 命令的使用如图 2-11 所示。

    注意

  • 24   基 础 篇

    图 2-11 SAVE 命令的使用

    (2)脚本文件的装载如果需要将 SQL 脚本文件装载到 SQL Plus 的 SQL 缓冲区中进行编辑,可以使用 GET

    命令。

    使用 GET 命令装载脚本文件的命令的语法为:

    GET filename [L[IST]]|[NOL[IST]]

    T 使用 LIST 参数,则在将脚本文件调入缓冲区的同时显示文件的内容。默认值为 LIST。 T 使用 NOLIST 参数,则在将脚本文件调入缓冲区时并不显示。

    GET 命令的使用如图 2-12 所示。

    图 2-12 GET 命令的使用

    (3)脚本文件的执行可以通过 START 或“@”命令执行脚本文件,语法为:

    START|@ filename [arg1 arg2 …]

    其中:

    T f ilename 为要执行的脚本文件名,默认扩展名为 .SQL。 T 如果没有指定文件路径,系统先从当前目录中查找该文件,如果没有查找到,则从

    SQLPATH 环境变量定义的文件夹中查找该文件。 T arg1、arg2 等为传递给脚本文件的参数。

    如果脚本文件不需要参数,则可以直接执行,如

    图 2-13 所示。@ 命令与 START 命令的差别在于 @ 命令既可以在

    SQL Plus 会话内部运行,也可以在启动 SQL Plus 时的命令行级别运行,而 START 命令只能在 SQL Plus 会话内部运行,如图 2-14 所示。

    图 2-13 START 命令的使用

  • 第 2 章 PL/SQL 开发工具的使用   25

    图 2-14 @ 命令的使用

    7. 使用替换变量如果希望一个 SQL 语句或脚本文件能够根据不同的输入条件随机执行,即运行时可以根

    据用户的不同输入而执行,就需要在 SQL 语句或脚本文件中使用交互式命令。替换变量就是实现 SQL 语句与用户交互的一种方式。

    SQL Plus 允许在 SQL 语句或脚本文件中使用替换变量,其方法是在变量名前加“ &”。如果替换变量已经定义,则会直接使用其值;如果替换变量没有预先定义,则该替换变量只

    在当前语句中起作用,并需要为其输入值。

    (1)预定义替换变量的定义与使用可以使用 DEFINE 命令为当前的 SQL Plus 环境定义 CHAR 类型的替换变量,并为替换变

    量指定值。一旦使用 DEFINE 命令定义了替换变量,则在当前会话中引用该替换变量时不再需要为该替换变量输入值。

    利用 DEFINE 命令预定义替换变量的语法为:

    DEFINE substitution_variable_name=value

    预定义替换变量的定义与使用如图 2-15 所示。

    如果替换变量为数值列提供数据,则可以直接引用;如果替换变量为字符类型或日期

    类型列提供数据,则需要在 SQL 语句中将替换变量用单引号引起来。

    (2)查看预定义的替换变量在 SQL Plus 中,可以执行 DEFINE 命令查看当前所有的 SQL Plus 预定义的替换变量,如

    图 2-16 所示。

    注意

  • 26   基 础 篇

    图 2-15 DEFINE 命令的使用

    图 2-16 查看预定义的替换变量

    其中,前 8 个是系统预定义的替换变量,分别表示当前时间、数据库名称、用户、当前连接的权限级别、SQL Plus 版本号、文本编辑器、数据库版本号以及数据库发布号。这些预定义的替换变量在所有会话中都可以引用。所有预定义的替换变量都可以修改、删除。

    (3)定义临时替换变量如果在 SQL 语句或脚本文件中的替换变量(如果一个标识符之前有“ &”符号,则 SQL

    Plus 认为该标识符是一个替换变量)没有预先定义,则在执行该 SQL 语句或脚本文件时提示用户输入值,如图 2-17 所示。

    图 2-17 定义临时替换变量

    如果不希望每次执行时都为同一个临时替换变量赋值,可以在替换变量名前加两个

    “ &”,这样只需给替换变量赋值一次,系统自动将该替换变量转换为预定义的替换变量,就可以在当前会话中一直使用,如图 2-18 所示。

    (4)清除替换变量通过使用 UNDEFINE variable_name 清除当前 SQL Plus 环境中保留的替换变量,例如:

  • 第 2 章 PL/SQL 开发工具的使用   27

    SQL>UNDEFINE dname

    图 2-18 临时替换变量的使用

    8. 使用绑定变量绑定变量是指在 SQL Plus 中定义,在 SQL 语句或 PL/SQL 程序中引用的变量。利用绑定

    变量可以返回 PL/SQL 程序运行结果或代码,并在 SQL Plus 中显示出来。在 SQL Plus 中定义绑定变量是通过 VARIABLE 命令来实现的,其语法为:

    VARIABLE variable [NUMBER|CHAR|CHAR(n)|CHAR(n[CHAR|BYTE])|NCHAR|NCHAR(n)|VARCHAR2(n[CHAR|BYTE])|NVARCHAR2(n)|BLOB|BFILE|CLOB|NCLOB|REFCURSOR|BINARY_FLOAT|BINARY_DOUBLE)]

    在 PL/SQL 程序中引用绑定变量时必须在变量名前加冒号( :)。在 SQL Plus 中,使用 EXECUTE 命令给绑定变量赋值,使用 PRINT 命令显示绑定变量的值,如图 2-19 所示。

    SQL Plus 提供了 REFCURSOR 类型(游标引用类型)的绑定变量,使得 SQL Plus 能够提取和格式化 PL/SQL 程序中的 SELECT 语句返回的结果。REFCURSOR 绑定变量能够用于引用存储过程中的游标变量,可以存储 SELECT 语句的查询结果,在 SQL Plus 中引用。

    图 2-20 显示了 REFCURSOR 类型绑定变量的使用。

    图 2-20 REFCURSOR 类型绑定变量的使用

    图 2-19 绑定变量的使用

  • 28   基 础 篇

    图 2-21 显示了作为存储过程参数的 REFCURSOR 绑定变量的使用。

    9. 使用 DBMS_OUTPUT 包显示信息在 PL/SQL 程序中,可以使用 DBMS_

    OUTPUT 包中的子程序进行调试、显示信息,以及输出生成报表等。如果要使用该

    包中的输出子程序,需要首先将 SQL Plus的环境变量 SERVEROUTPUT 设置为 ON状态,语法为:

    SET SERVEROUTPUT ON|OFF

    ON 和 OFF 取值用于打开或关闭缓冲区的输出功能。开启缓冲区输出功能

    后, 就 可 以 使 用 DBMS_OUTPUT.PUT 或DBMS_OUTPUT.PUT_LINE 子程序向输出缓冲区中输入数据,SQL Plus 将检索缓冲区中的内容,然后输出到屏幕上。

    图 2-22 显示了 SERVEROUTPUT 参数的设置及程序运行情况。

    图 2-22 SERVEROUTPUT 参数与 DBMS_OUTPUT 包应用

    2.2 SQL Developer

    2.2.1 SQL Developer 简介

    Oracle SQL Developer 是一个免费的、图形化的、集成的数据库开发工具,是 SQL Plus 的图形化工具。使用 SQL Developer,用户可以浏览数据库对象、运行 SQL 语句和 SQL 脚本,并且还可以编辑和调试 PL/SQL 程序。此外,SQL Developer 还提供了许多 Application Express

    图 2-21 REFCURSOR 类型绑定变量作为参数的使用

  • 第 2 章 PL/SQL 开发工具的使用   29

    报表供用户使用,用户也可以创建和保存自己的报表。

    Oracle SQL Developer 使用 Java 语言编写而成,可以连接到任何 9.2.0.1 版和更高版本的Oracle 数据库,并且可以在 Windows、Linux 和 Mac OSX 等系统上运行。SQL Developer 到数据库的默认连接使用的是 JDBC 瘦驱动程序。使用 JDBC 瘦驱动程序意味着无需安装 Oracle 客户端,从而将配置和占用空间大小降至最低。

    Oracle SQL Developer 3.2 已经被集成在 Oracle 12c 中,以便进行 Oracle 数据库的开发工作。用户也可以到 Oracle 的官方网站免费下载最新版本的 Oracle SQL Developer,然后解压安装即可。

    2.2.2 创建数据库连接

    要使用 Oracle SQL Developer 对数据库进行操作,需要首先创建到目标数据库的连接。使用 SQL Developer 可以建立到 Oracle、MySQL 和 SQL Server 数据库的连接。这里只介绍到Oracle 数据库的连接。

    1)选择“开始→所有程序→ Oracle – OraDb12Home1 →应用程序开发→ SQL Developer”命令,以“管理员身份运行”,启动“SQL Developer”工具。

    2)如果是第一次启动 SQL Developer 工具,会首先弹出图 2-23 所示的对话框,设置 JDK的路径,然后会弹出图 2-24 所示的“配置文件类型关联”对话框,选择与 SQL Developer 关联的文件类型。选择完后,单击“确定”按钮,进入图 2-25 所示的 Oracle SQL Developer 操作界面。

    图 2-23 设置 JDK 路径 图 2-24 选择与 SQL Developer 关联的文件类型

    3)在 Oracle SQL Developer 操作界面中,右键单击左侧导航栏中的“连接”选项卡,在弹出的菜单中选择“新建连接”,进入“新建 / 选择数据库连接”对话框,如图 2-26 所示。

    4)在“新建 / 选择数据库连接”对话框中,输入“连接名”、“用户名”、“口令”;然后选择要连接的数据库类型标签页,如“Oracle”,然后进行“主机名”、“端口”以及“SID”或“服务名”等数据库连接相关信息的设置。

    5)然后单击“测试”按钮,可以进行数据库连接测试。如果测试成功,会在对话框左下角的“状态”后显示“成功”。

  • 30   基 础 篇

    图 2-25 Oracle SQL Developer 操作界面 图 2-26 “新建 / 选择数据库连接”对话框

    6)测试成功后,单击“保存”按钮,会在左侧的连接列表中添加一条记录,以便将来使用。

    7)单击“连接”按钮,返回 Oracle SQL Developer 操作界面,在左侧导航栏的“连接”选项卡中可以看到新建的连接“hr_pdborcl”,如图 2-27 所示。

    图 2-27 添加了新建的数据库连接

    创建数据库连接后,选中该连接,右键单击,在弹出菜单中可以选择“连接”、“断开连

    接”、“重命名连接”、“删除”、“属性”(编辑连接)等命令,进行数据库连接管理操作。

    2.2.3 浏览与管理数据库对象

    Oracle SQL Developer 操作界面中,在左侧导航栏的“连接”选项卡中,选中要进行操作的数据库连接,如 hr_pdborcl,单击该节点左边的“ +”号(或直接双击该数据库连接),则连接数据库,同时分门别类地展开当前模式的所有对象及用户等其他数据库对象信息。

    选择一个节点,如“表”,单击该节点左边的“ +”号,展开该节点,可以看到当前方案中的所有表。选择某个具体表,如 DEPARTMENTS 表,此时在右侧窗口中可以看到

  • 第 2 章 PL/SQL 开发工具的使用   31

    DEPARTMENTS 表的详细信息。如图 2-28 所示。

    图 2-28 浏览数据库对象

    2.2.4 执行 SQL 语句

    利用 Oracle SQL Developer 工具中的 SQL 工作表,可以像使用 SQL Plus 工具一样执行SQL 语句、PL/SQL 程序、SQL Plus 命令。

    在选择“工具”菜单中的“ SQL 工作表”选项打开 SQL 工作表时,需要先建立 SQL 工作表与数据库连接之间的关联,如图 2-29 所示。在选择好数据库连接后,点击“确定”按

    钮,打开 SQL 工作表,如图 2-30 所示。输入SQL 语句后,单击“ ”按钮,执行 SQL 语句。

    图 2-30 利用 SQL 工作表执行 SQL 操作

    图 2-29 建立 SQL 工作表与数据库连接之间的关联

  • 32   基 础 篇

    2.2.5 开发 PL/SQL 程序

    利用 Oracle SQL Developer 工具可以进行 PL/SQL 程序的开发、运行、调试。PL/SQL 程序主要用于创建存储过程、函数、程序包、触发器等功能模块。

    本节将以存储过程的开发为例,介绍如何在 SQL Developer 中进行 PL/SQL 程序开发。可以使用 SQL 工作表编写代码创建存储过程,也可以通过图形化界面操作创建存储过程。

    1. 利用 SQL 工作表创建存储过程可以在 SQL 工作表中输入下列代码,单击“ ”按钮,创建一个存储过程,如图 2-31

    所示。

    图 2-31 执行 PL/SQL 程序

    2. 利用图形化界面创建存储过程利用图形化界面操作创建上述存储过程的方法和步骤如下。

    1)在 SQL Developer 操作界面左侧的导航栏中选择连接 hr_pdborcl,建立与数据库的连接。

    2)在导航栏中右键单击“过程”节点,在弹出菜单中选择“新建过程”命令,进入“创建 PL/SQL 过程”对话框,进行过程所属方案、过程名称以及参数设置,如图 2-32 所示。

    3)单击“确定”按钮,进入 SQL 工作表,系统自动生成创建存储过程的基本代码框架,如图 2-33 所示。

    4)向过程代码框架中输入过程主体代码,进行程序设计。在输入代码后,单击工具栏上的保存按钮,编译并保存该存储过程,如图 2-34 所示。

    5)如果程序存在编译错误,则会显示在“编辑器 - 日志”工作表中。同时展开导航栏中的“过程”节点,可以看到创建的存储过程名称前面的图标上有个红色的叉号,如“ ”,说

    明该过程存在编译错误,需要编辑修改。

    6)右键单击有编译错误的存储过程名称,在弹出菜单中选择“编辑”命令,进入编辑状态,可以根据“编译器”日志栏目中的提示信息进行代码编辑。

  • 第 2 章 PL/SQL 开发工具的使用   33

    图 2-32 创建 PL/SQL 过程对话框 图 2-33 生成过程代码框架

    图 2-34 编译并保存 PL/SQL 程序

    7)编辑完代码后,单击保存按钮。此时,原来过程名称之前图标上的红色叉号消失。

    2.2.6 执行与调试 PL/SQL 程序

    为了执行和调试 PL/SQL 程序,首先创建一个名为 proc_debug 的存储过程,代码为:

    CREATE OR REPLACE PROCEDURE proc_debug( p_deptno IN NUMBER)AS CURSOR c_emp IS SELECT * FROM employees   WHERE department_id=p_deptno; v_avgsal employees.salary%TYPE;BEGIN SELECT AVG(salary) INTO v_avgsal FROM employees  WHERE department_id= p_deptno;

  • 34   基 础 篇

     FOR v_emp IN c_emp LOOP  IF v_emp.salary>v_avgsal THEN   DBMS_OUTPUT.PUT_LINE(v_emp.employee_id||' '||   v_emp.first_name||' '||v_emp.salary);  END IF; END LOOP;END PROC_DEBUG;

    下面将以存储过程 proc_debug 为例,介绍 PL/SQL 的运行与调试。

    1. 执行 PL/SQL 程序在导航栏中的“过程”节点中,右键单击过程

    名“ proc_debug”,在弹出菜单中选择“运行”命令,进入“运行 PL/SQL”窗口,如图 2-35 所示。

    在为参数 p_deptno 赋值 60 后,单击“确定”按钮,执行该存储过程,并显示结果,如图 2-36 所示。

    2. 调试 PL/SQL 程序尽管 PL/SQL 程序千差万别,但调试方法基本相

    似,基本步骤为:

    1)使程序处于编辑状态。2)在程序适当地方设置断点,然后运行程序到

    断点处。

    图 2-36 执行 proc_debug 存储过程输出结果

    3)查看断点处程序状态,包括变量值、输入结果等,然后修改变量,控制程序运行流程等进行程序调试。

    4)如果有问题,反复调试修改,直到完全正确为止。只有具有 DEBUG CONNECT SESSION 和 DEBUG ANY PROCEDURE 系统权限的用户才能

    调试 PL/SQL 程序,否则一旦开始运行,就会在“调试 -日志”中提示“此会话需要 DEBUG CONNECT SESSION 和 DEBUG ANY PROCEDURE 用户权限”。因此,为了保证 hr 用户可以

    图 2-35 运行 proc_debug 存储过程

  • 第 2 章 PL/SQL 开发工具的使用   35

    调试 PL/SQL 程序,需要以 SYS 用户登录数据库并给 hr 用户授权,命令为:

    GRANT DEBUG CONNECT SESSION,DEBUG ANY PROCEDURE TO hr;

    下面以存储过程 proc_debug 为例说明 PL/SQL 的调试过程。1)在导航栏中的“过程”节点中,右键单击过程名“ proc_debug”,在弹出菜单中选择

    “编辑”命令,存储过程处于编辑状态。

    2)可以在代码编辑窗口的左侧边框区域单击鼠标左键,添加断点,以便查看程序运行到此处时是否发生错误,如图 2-37 所示。

    图 2-37 在程序中添加断点

    3)单击调试按钮“ ”,进入图 2-38 所示的“调试 PL/SQL”窗口,进行参数设置。如为 p_deptno 参数赋值 60。

    4)设置完参数值后,单击“确定”按钮,程序运行到设置断点处,并在调试窗口显示断点处程序中变量的状态,如

    图 2-39 所示。5)选择工具栏中的“步过”、“步入”、“步出”、“步至方

    法结束”、“恢复”、“暂停”、“终止”等按钮,继续调试程序,

    直到程序完全正确为止。

    图 2-39 存储过程调试的断点状态

    图 2-38 PL/SQL 调试窗口

  • 36   基 础 篇

    2.3 PL/SQL Developer

    2.3.1 PL/SQL Developer 简介

    PL/SQL Developer 是由 Allround Automations 公司开发的一个商业开发工具,是专门用于 Oracle 数据库存储程序单元开发的集成开发环境(IDE)。PL/SQL Developer 开发环境将程序的编辑、编译、纠正、测试、调试、优化和查询等功能融为一体,可以方便地进行 Oracle 数据库服务器端的开发。

    PL/SQL Developer 属于商业软件,要使用该正版软件,需要支付一定的费用。用户可以到Allround Automations 公司的官方网站下载试用版,下载网址为:http://www.allroundautomations.com/plsqldev.html

    PL/SQL Developer 可以在 Windows 2000 或更新版本的操作系统上运行,兼容 Oracle Server 7.0 及更新版本。要连接到 Oracle 数据库服务器,PL/SQL Developer 需要 32 位版本的 Oracle Client 7.0 或更新版本。如果工作站上运行的是 64 位版本的 Oracle Client 或 Oracle Server,则需另行安装 32 位的 Oracle Client。

    2.3.2 连接数据库

    启动 PL/SQL Developer,进入数据库登录界面,如图 2-40 所示。输入用户名、口令、数据库(服务)名,并选择连接方式后,单击“确定”按钮,进入

    PL/SQL Developer 集成开发界面,如图 2-41 所示。

    图 2-40 PL/SQL Developer 登录界面 图 2-41 PL/SQL Developer 集成开发界面

    在菜单栏中选择“ File → New → SQL Window”命令,进入 SQL 语句与 PL/SQL 程序的编辑、运行窗口,如图 2-42 所示。

    要使用 PL/SQL Developer 连接数据库,必须在运行 PL/SQL Developer 的计算机上预先安装 Oracle Client 或 Oracle Server 软件,并进行过数据库网络服务名的配置。

    注意

  • 第 2 章 PL/SQL 开发工具的使用   37

    图 2-42 SQL Window 窗口

    2.3.3 编写与运行 PL/SQL 程序

    打开 PL/SQL Developer,连接数据库后,新建“ SQL Window” 窗口,就可以编写 PL/SQL 程序了,如图 2-43 所示。输入程序后,单击按钮“ ”或按快捷键 F8 编译、执行该程序。如果存在编译错误,系统将弹出错误提示窗口。如果程序有输出结果,将在“ Output”标签页中显示输出结果。

    图 2-43 编辑、运行 PL/SQL 程序

    如果编写 PL/SQL 命名块,输入程序后,单击按钮“ ”或按快捷键 F8 编译、执行该程序后,将创建命名块。如果存在编译错误,系统不会提示错误信息。此时,在左侧的对象浏

    览器窗口中,在对象名称之前的图标上将显示一个红色的叉,如图 2-44 所示。如果新建的 PL/SQL 命名块存在编译错误,可以在对象浏览器中使用鼠标右键单击该对

    象,在弹出菜单中选择“ Edit”命令,编辑该命名块。在编辑界面中,可以看到程序错误的原因,如图 2-45 所示。

  • 38   基 础 篇

    图 2-44 创建 PL/SQL 命名块

    图 2-45 编辑错误的 PL/SQL 命名块

    2.3.4 测试 PL/SQL 程序

    创建 PL/SQL 对象之后,可以进行测试,验证是否存在运行时错误。可以在对象浏览器中右键单击要进行测试的程序单元(一个独立函数或过程、一个包中的过程或函数或者一个对

    象类型的方法),在弹出菜单中选择“Test”命令,创建一个测试脚本,如图 2-46 所示。

    图 2-46 自动生成的测试脚本

  • 第 2 章 PL/SQL 开发工具的使用   39

    也可以在 PL/SQL Developer 主界面中,选择“ File → New → Test Window”命令,创建一个空的测试脚本。例如,创建存储过程 proc_test 的测试脚本,如图 2-47 所示。

    单击测试按钮“”或按快捷键 F9,进入测试窗口,如图 2-48 所示。可以选择相应按钮进行“RUN”、“Step Into”、“Step Over”和“Step Out” 等多种形式的调试。

    图 2-47 测试存储过程 proc_test 图 2-48 PL/SQL 程序单元测试窗口

    2.4 小结

    俗话说“工欲善其事必先利其器”,熟练掌握一个开发工具的使用,可以极大地提高 PL/SQL 程序开发的效率。对初学者而言,一个合适的开发工具可以避免受学习过程中很多旁枝末节问题的干扰,可以集中精力学习 PL/SQL 核心的内容。本章介绍了 PL/SQL 常用的三个开发工具,包括 SQL Plus、SQL Developer 和 PL/SQL Developer,读者可以选择一个自己喜欢的工具进行 PL/SQL 的学习与开发。