没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
下载
第11章 P L / S Q L基础
本章介绍如何使用 Oracle Developer在原型和设计的基础上建立应用程序。 P L / S Q L 是
O r a c l e 对S Q L 的过程化扩展。换句话说, P L / S Q L 使你不仅能执行 S Q L ,也能将其嵌入到控制
结构中,如I F - T H E N - E L S E和循环结构。与只使用 S Q L相比,可以使用户在应用中完成更复杂
的工作。P L / S Q L的语法来自复杂的A d a程序设计语言,但实际上用起来要简单得多。
本章介绍P L / S Q L 程序设计语言的基础,包括如何组织数据、如何用控制结构编程和如何
将S Q L 作为语言的一部分使用。第 1 2 章将详细讲述使用更复杂的程序结构,这种结构可将程
序组织为可重用性代码。第1 3 章介绍Oracle Developer中的调试工具。读完本书的这一部分后,
将掌握如何创建、测试和调试应用程序。
本章着重介绍P L / S Q L 基本编程结构。在Oracle Developer中,可以在两种结构中放置用户
代码:t r i g g e r ( 触发器)和program unit(程序单元 )。D e v e l o p e r 的事件激活触发器,依次调用程
序单元。本章讲述如何编写基本触发器和程序单元代码。第 1 2章介绍如何编制更复杂的程序
单元( p r o c e d u r e s 、f u n c t i o n和p a c k a g e )。也可以使用这部分的知识在 O r a c l e 数据库中开发存储
程序单元(数据库触发器、过程和包)。第1 2 章的最后一部分讨论如何将程序单元打包为程序库,
使不同的应用可以重用这部分代码。
注意 Oracle Developer使用本地P L / S Q L版本编译程序单元。O r a c l e数据库服务器使用
当前Oracle数据库服务器PL/SQL的版本编译程序单元。这两个版本的PL/SQL可能不同,
所以某些功能在服务器P L / S Q L上可以使用而在Oracle Developer PL/SQL上不能使用。
例如,在O r a c l e数据服务器上使用版本为7 . 3 . 4,那么在服务器上的P L / S Q L版本与O r a c l e
Developer PL/SQL 8相比缺少许多工具。通常,虽然这只对高级用法有影响,如在代码
中使用嵌套表,但是需要了解代码的假定,这些假定是说明建立代码的基础是什么。
P L / S Q L 基本程序单元结构如下:
带有这种结构的完整程序是一个无名块。整个块是一个 P L / S Q L语句,因此,在 E N D 后需
要分号终结符。如果没有数据说明,可以省略 D E C L A R E 、B E G I N和E N D 关键字。如果没有
异常处理,可以省略 E X C E P T I O N关键字和 W H E N 子句。通常包含B E G I N - E X C E P T I O N - E N D
第三部分 利用D e v e l o p e r
编制程序
序列结构,而不仅仅只是 E X C E P T I O N子句。在块中至少要包含一个有效的程序语句,因此上
面的代码中使用了 n u l l (空)语句。在本章的代码例子中,为了使例子能够编译,如果块中没有
代码,则其中都包含一个n u l l 语句。
注意 PL/SQL块与Oracle Developer Forms的数据块完全不同。PL/SQL块是一段可执行
程序(一个无名块、一个过程或一个函数),而F o r m s 数据块是在一个表单中项定义的集
合,这些项可能映射、也可能不映射基准服务器表定义。可以把F o r m s的数据块看作是
记录的列表。在P L / S Q L块中可以包含任何级的嵌套P L / S Q L块,根据每个块命名的作用
域限制所定义嵌套块中的块。PL/SQL是象Ada语言一样的块结构程序设计语言。
下面是应该知道的几个实际问题:
■ 大多数P L / S Q L 表达式使用与S Q L 表达式一样的语法,可以使用大多数 Oracle SQL内置
的函数。如果了解S Q L ,就了解大部分的P L / S Q L。
■ P L / S Q L不区分大小写字母,所以可以使用大写字母、小写字母,或者为改进可读性而
用大小写字母混合编写代码。在引号中的字母 (字符作为其本身使用而不是用作其他东
西的符号)区分大小写。
■ P L / S Q L标识符必须以字母开头,并且只能包含数字、下划线、符号 ( # ) 和美元符号( $ )。
标识符最多为3 0 个字符,并且不能是系统的保留字,如 D E C L A R E或E N D。
■ 在引号内的字符串中,用两个单引号表示一个单引号,如 ' Talbot' s Farm'。
■ B O O L E A N 型(逻辑型 )数据的值为 T R U E ( 真)、FA L S E ( 假)或N U L L (空值),不用引号。
例如I S _ W I N D O W S _ D I S P L AY E D : = T R U E ,不使用' T R U E ' 。
■ 可以使用两个横线注释一行或使用一对 / * - * / 之间的多行注释:
提示 使用行内注释要优于多行注释。因为很容易忘记注释终结符*/或者可能在编写代
码时删除了注释对的某一边。
如果大量使用P L / S Q L 编程,参见Scott Urman的《Oracle 8 PL/SQL程序设计》一书。这本
书的参考资料中包含了各种内部函数的完整列表。
11.1 数据概述
关于程序设计语言需要理解的最重要的问题也许就是这种语言如何组织数据。有的程序
设计语言有非常复杂的类型系统,而有的却十分简单。有的语言可以扩展类型系统,而有的
却不能。
11.1.1 数据类型
数据类型是对数据的分类,如字符、数值或日期。 P L / S Q L 的程序数据类型与 S Q L 数据类
型一致,并扩充了 S Q L数据类型。由于 P L / S Q L 最主要的目的是嵌入 S Q L ,所以希望直接映射
到S Q L 语句和其中值的类型。 P L / S Q L 也增加了几种在块程序设计语言中有用的数据类型:
B I N A RY _ I N T E G E R (二进制整数型)、B O O L E A N ( 逻辑型)、R E C O R D ( 记录型)和TA B L E (表型)。
2 4 4 第三部分 利用D e v e l o p e r编制程序
下载
Oracle Developer中使用的P L / S Q L增加了几种类型与表单中不同的对象相对应,例如 w i n d o w
( 窗口型)和b l o c k ( 块型)。
注意 CURSOR和REF CURSOR是可以与SQL语句联系的特殊数据类型,细节参见11.3
节“在PL/SQL中使用SQL”。
1. SQL类型
P L / S Q L提供了与S Q L一一对应的类型系统,至少是重要 S Q L 类型是这样。以下这些数据
类型的细节参见联机文档: D E C I M A L 、 F L O AT 、I N T E G E R 、N U M B E R 、R E A L 、
S M A L L I N T 、D AT E、D AT E T I M E、C H A R A C T E R 、L O N G、R AW、S T R I N G 、VA R C H A R 和
VA R C H A R 2。在P L / S Q L块中可以使用标准Oracle SQL转换函数进行这些类型的显式转换。
2 . P L / S Q L二进制整数类型和布尔类型
为了处理带符号整型数,P L / S Q L增加了三种数据类型。当在 P L / S Q L 中使用带符号整型数
进行计算时,不需要将数据像 N U M B E R 或其他S Q L数据类型一样转换为内部格式。在整数运
算量很大的块中,使用带符号整数代替 N U M B E R数据可以提高性能。
基本的带符号整数类型是 B I N A RY _ I N T E G E R ,可以表示从 - 2 1 4 7 4 8 3 6 4 7 ~ 2 1 4 7 4 8 3 6 4 7 范
围的整数。两个子类型的范围要小一些。 N AT U R A L (自然数)类型可以表示从0 ~ 2 1 4 7 4 8 3 6 4 7 范
围的整数,P O S I T I V E ( 正数)类型可以表示从1 ~ 2 1 4 7 4 8 3 6 4 7 范围的整数,可以使用这些数据类型
限定非负数值。
B O O L E A N 类型可以直接处理 T R U E和FA L S E 。也可以把B O O L E A N数据置为N U L L ,意
思是其值没有定义。这意味着PL/SQL Boolean值有三种可能的状态,T R U E 、FA L S E 和N U L L ,
其逻辑是三值逻辑。
注意 三值逻辑可以是反直观的( c o u n t e r i n t u i t i v e )。例如,比较两个B o o l e a n变量,两个
中的一个或两个都为N U L L,结果为N U L L ,而不是T R U E。如果在I F语句中表达式值
为N U L L,则语句执行E L S E 子句。第三个例子:N O T ( N U L L )等于N U L L。关于三值逻
辑及其在SQL中的使用的讨论参见Chris Date 的《Relational Database: Selected Writings》
( A d d i s o n—We s l y,1 9 8 6 )第1 5章中的“Null Values in Database Management”(在数据库
管理中的空值)部分。数据库管理器不是一贯地采用三值逻辑的一种模型,所以要仔细
查阅Oracle文档,理解在特定情况下会发生什么。
3. PL/SQL的记录
用P L / S Q L 记录可以定义包含几个数据元素的单一变量,很像数据库中的行。可以使用
R E C O R D 类型创建任何类型的结构化数据。然后可以使用圆点符号像逻辑单元一样引用数据。
创建记录,必须首先创建一个独立的记录类型。例如,创建一个对应于部分 L e d g e r表的
类型,可以在D E C L A R E ( 声明)部分采用如下语句:
第11章 P L / S Q L基础 2 4 5
下载
在这里,记录只描述表的一部分数据。 NOT NULL(非空)子句与S Q L 中NOT NULL一样,
阻止用户给域赋值 N U L L。尽管R E C O R D 类型常见的应用是描述与表数据相对应的数据,但
是在其中可以包含任意类型的域,包括 R E C O R D 类型。可以在程序包中使用记录。例如描述
未存储在数据库中的运行时对象,如一天 2 4 小时的特定时间。可以用对记录中数据进行操作
的一组函数封装类型,那样,就可以代入时间值和时间间隔的值去调用 S u b t r a c t 函数求出它们
的差值。
可以说明两个Ti m e 2 4 Ty p e 类型的变量,把它们传递给函数,取回差值,把它赋给第三个
Ti m e 2 4 Ty p e 类型的变量。这种封装和抽象数据类型可以描述比简单 P L / S Q L类型更复杂的对象。
第1 2 章给出了关于封装和抽象数据类型的完整的讨论。
注意 参见11 . 1 . 3节“使用类型属性”,该节介绍了使域类型与数据库列类型一致的方
法。
一旦定义了类型,就可以使用类型创建变量,在 D E C L A R E部分也一样:
这个记录包含一个值为 0的L e d g e r I D 域和其余值为 N U L L 的域。P L / S Q L 在执行D E C L A R E
部分时创建变量,在执行定义变量的块的 E N D时释放变量。如下面代码段中所示,可以给域
赋值,使用圆点符号引用域:
注意,比较操作符为“=”,然而赋值操作符是“: = ”。
4. PL/SQL表
尽管R E C O R D 类型功能强大,但是缺乏一个功能:在同一时刻描述多于一行的数据的能
力。这就是 TA B L E类型的工作。大多数程序设计语言都有这种多值 ( m u l t i p l e - v a l u e ) 数据类
型, P L / S Q L 也不例外。
A r r a y ( 数组)在程序设计语言中是表示多值的变量,其值标为元素可以通过一个整数下标
访问它。数组第一个元素的下标是 1,数组第二个元素的下标是 2,以此类推。有的语言的数
2 4 6 第三部分 利用D e v e l o p e r 编制程序
下载
剩余18页未读,继续阅读
zzzzl333
- 粉丝: 705
- 资源: 7万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- html css网页制作成品案例.zip
- 神经网络介绍及教程&案例.docx
- 重庆市首席信息官(CIO)协会 《软件及信息化工程造价规范V5.0》T/CQCIO 001-2019
- 联想Y471老A卡笔记本开机黑屏 需等待黑屏结束才能进入桌面,解决方法
- elasticsearch-7.14.0和ik分词器
- 利用MPI计算任意范围内的质数
- EnviroSkyandWeather v2.1.1(u2017.1.2)真实动态天气系统包
- React框架介绍及相关教程、案例.docx
- 基于Springboot和Vue教务评教系统(PC端+server端源码+数据库MySQL脚本+环境部署步骤讲解+运行步骤讲解)
- react-photo-view图片预览组件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0