PL/SQL程序设计
目 录
第一章 PL/SQL 程序设计简介.................................................................................... 4
§1.2 SQL与PL/SQL..................................................................................................... 4
§1.2.1 什么是PL/SQL?............................................................................................. 4
§1.2.1 PL/SQL的好处............................................................................................... 4
§1.2.2 PL/SQL 可用的SQL语句................................................................................. 5
§1.3 运行PL/SQL程序.................................................................................................. 5
第二章 PL/SQL块结构和组成元素................................................................................. 6
§2.1 PL/SQL块............................................................................................................ 6
§2.2 PL/SQL结构......................................................................................................... 6
§2.3 标识符.................................................................................................................. 6
§2.4 PL/SQL 变量类型.................................................................................................. 7
§2.4.1 变量类型......................................................................................................... 7
§2.4.2 复合类型........................................................................................................ 9
§2.4.3 使用%ROWTYPE........................................................................................... 11
§2.4.4 LOB类型*..................................................................................................... 11
§2.4.5 BIND 变量..................................................................................................... 11
§2.4.6 INDEX BY TABLES....................................................................................... 12
§2.4.7 数据类型的转换*............................................................................................ 13
§2.5 运算符和表达式(数据定义).................................................................................... 13
§2.5.1 关系运算符.................................................................................................... 13
§2.5.2 一般运算符.................................................................................................... 13
§2.5.3 逻辑运算符.................................................................................................... 14
§2.6 变量赋值............................................................................................................. 14
§2.6.1 字符及数字运算特点....................................................................................... 14
§2.6.2 BOOLEAN 赋值............................................................................................. 14
§2.6.3 数据库赋值.................................................................................................... 14
§2.6.4 可转换的类型赋值.......................................................................................... 15
§2.7 变量作用范围及可见性......................................................................................... 15
§2.8 注释................................................................................................................... 16
§2.9 简单例子............................................................................................................. 17
§2.9.1 简单数据插入例子......................................................................................... 17
§2.9.2 简单数据删除例子......................................................................................... 17
第三章 PL/SQL流程控制语句....................................................................................... 18
§3.1 条件语句............................................................................................................. 18
§3.2 CASE 表达式...................................................................................................... 19
§3.3 循环................................................................................................................... 19
§3.3 标号和GOTO....................................................................................................... 21
§3.4 NULL 语句........................................................................................................... 21
第四章 游标的使用....................................................................................................... 23
§4.1 游标概念.............................................................................................................. 23
§4.1.1 处理显式游标................................................................................................. 23
§4.1.2 处理隐式游标................................................................................................. 27
§4.1.3 关于 NO_DATA_FOUND 和 %NOTFOUND的区别............................................. 27
§4.1.4 游标修改和删除操作....................................................................................... 27
§4.2 游标变量.............................................................................................................. 28
§4.2.1 声明游标变量................................................................................................ 28
§4.2.2 游标变量操作................................................................................................ 29
§4.2.3 游标变量应用................................................................................................ 30
第五章 异常错误处理.................................................................................................. 31
§5.1 异常处理概念........................................................................................................ 31
§5.1.1 预定义的异常处理........................................................................................... 31
§5.1.2 非预定义的异常处理........................................................................................ 32
§5.1.3 用户自定义的异常处理.................................................................................... 33
§5.1.4 用户定义的异常处理....................................................................................... 34
§5.2 异常错误传播........................................................................................................ 35
§5.2.1 在执行部分引发异常错误................................................................................. 36
§5.2.2 在声明部分引发异常错误................................................................................. 36
§5.3 异常错误处理编程................................................................................................. 37
§5.4 在 PL/SQL 中使用 SQLCODE, SQLERRM.............................................................. 37
第六章 存储函数和过程................................................................................................ 39
§6.1 引言.................................................................................................................... 39
§6.2 创建函数.............................................................................................................. 39
§6.3 存储过程.............................................................................................................. 42
§6.3.1 创建过程....................................................................................................... 42
§6.3.2 调用存储过程................................................................................................ 44
§6.3.3 开发存储过程步骤.......................................................................................... 46
§6.3.4 与过程相关数据字典....................................................................................... 47
第七章 包的创建和应用................................................................................................ 48
§7.1 引言.................................................................................................................... 48
§7.2 包的定义.............................................................................................................. 48
§7.3 包的开发步骤....................................................................................................... 49
§7.4 包定义的说明....................................................................................................... 49
§7.5 子程序重载.......................................................................................................... 57
§7.6 删除过程、函数和包............................................................................................. 59
§7.7 包的管理.............................................................................................................. 59
第八章 触发器.............................................................................................................. 60
§8.1 触发器类型.......................................................................................................... 60
§8.1.1 DML触发器................................................................................................... 60
§8.1.2 替代触发器..................................................................................................... 60
§8.1.3 系统触发器..................................................................................................... 60
§8.2 创建触发器.......................................................................................................... 61
§8.2.1 触发器触发次序.............................................................................................. 62
§8.2.2 创建DML触发器............................................................................................ 62
§8.2.3 创建替代(INSTEAD OF)触发器......................................................................... 63
§8.2.3 创建系统事件触发器........................................................................................ 64
§8.2.4 系统触发器事件属性........................................................................................ 65
§8.2.5 使用触发器谓词.............................................................................................. 66
§8.2.6 重新编译触发器.............................................................................................. 66
§8.3 删除和使能触发器................................................................................................. 66
§8.4 触发器和数据字典................................................................................................. 67
§8.5 数据库触发器的应用举例...................................................................................... 67
§8.6 数据库触发器的应用实例...................................................................................... 77
第九章 ORACLE提供的常用包..................................................................................... 81
§9.1 使用DBMS_SQL软件包....................................................................................... 81
§9.2 使用EXECUTE IMMEDIATE 语句.......................................................................... 82
§9.3 使用DBMS_DDL软件包....................................................................................... 83
§9.4 使用DBMS_JOB软件包编制工作调度................................................................... 84
§9.5 使用DBMS_OUTPUT软件包................................................................................. 86
§9.6 使用UTL_FILE软件包........................................................................................... 87
第一章 PL/SQL 程序设计简介
PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。除此之外,可以在ORACLE数据库的某些客户端工具中,使用PL/SQL语言也是该语言的一个特点。本章的主要内容是讨论引入PL/SQL语言的必要性和该语言的主要特点,以及了解PL/SQL语言的重要性和数据库版本问题。还要介绍一些贯穿全书的更详细的高级概念,并在本章的最后就我们在本书案例中使用的数据库表的若干约定做一说明。
本章主要重点:
l PL/SQL概述
l PL/SQL块结构
l PL/SQL流程
l 运算符和表达式
l 游标
l 异常处理
l 数据库存储过程和函数
l 包
l 触发器
§1.2 SQL与PL/SQL
§1.2.1 什么是PL/SQL?
PL/SQL是 Procedure Language & Structured Query Language 的缩写。ORACLE的SQL是支持ANSI(American national Standards Institute)和ISO92 (International Standards Organization)标准的产品。PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数据库PL/SQL和工具PL/SQL。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。本章主要介绍数据库PL/SQL内容。
§1.2.1 PL/SQL的好处
§1.2.1.1 有利于客户/服务器环境应用的运行
对于客户/服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务器进行大量的数据交换。应用运行的效率自然就回受到影响。如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器端来执行。自然就省去了数据在网上的传输时间。
§1.2.1.2 适合于客户环境
PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL程序运行。
§1.2.2 PL/SQL 可用的SQL语句
PL/SQL是ORACLE系统的核心语言,现在ORACLE的许多部件都是由PL/SQL写成。在PL/SQL中可以使用的SQL语句有:
INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。
提示:在 PL/SQL中只能用 SQL语句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的话,只能以动态的方式来使用。
l ORACLE 的 PL/SQL 组件在对 PL/SQL 程序进行解释时,同时对在其所使用的表名、列名及数据类型进行检查。
l PL/SQL 可以在SQL*PLUS 中使用。
l PL/SQL 可以在高级语言中使用。
l PL/SQL可以 在ORACLE的 开发工具中使用。
l 其它开发工具也可以调用PL/SQL编写的过程和函数,如Power Builder 等都可以调用服务器端的PL/SQL过程。
§1.3 运行PL/SQL程序
PL/SQL程序的运行是通过ORACLE中的一个引擎来进行的。这个引擎可能在ORACLE的服务器端,也可能在 ORACLE 应用开发的客户端。引擎执行PL/SQL中的过程性语句,然后将SQL语句发送给数据库服务器来执行。再将结果返回给执行端。