PL/SQL
PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。
一.PL/SQL基本概念
1.1 PL/SQL的作用
使用PL/SQL可以编写具有很多高级功能的程序,虽然通过多个SQL语句可能也能实现同样的功能,但是相比而言,PL/SQL具有更为明显的一些
优点:
1.能够使一组SQL语句的功能更具模块化程序特点;
2.采用了过程性语言控制程序的结构;
3.可以对程序中的错误进行自动处理,使程序能够在遇到错误的时候
不会被中断;
4.具有较好的可移植性,可以移植到另一个Oracle数据库中;
5.集成在数据库中,调用更快;
6.减少了网络的交互,有助于提高程序性能。
通过多条SQL语句实现功能时,每条语句都需要在客户端和服务端传递,而且每条语句的执行结果也需要在网络中进行交互,占用了大量的网
络带宽,消耗了大量网络传递的时间,而在网络中传输的那些结果,往往
都是中间结果,而不是我们所关心的。
而使用PL/SQL程序是因为程序代码存储在数据库中,程序的分析和执
行完全在数据库内部进行,用户所需要做的就是在客户端发出调用PL/SQL 的执行命令,数据库接收到执行命令后,在数据库内部完成整个PL/SQL程序的执行,并将最终的执行结果返馈给用户。在整个过程中网络里只传输
了很少的数据,减少了网络传输占用的时间,所以整体程序的执行性能会
有明显的提高。
1.2 PL/SQL程序的基本结构
PL/SQL块由四个基本部分组成:声明、执行体开始、异常处理、执行
体结束。
下面是四个部分的基本结构:
DECLARE—可选部分
变量、常量、游标、用户定义异常的声明
…… 
BEGIN—必要部分
SQL语句和PL/SQL语句构成的执行程序
… 
EXCEPTION—可选部分
程序出现异常时,捕捉异常并处理异常
…… 
END;—必须部分
在数据库执行PL/SQL程序时,PL/SQL语句和SQL语句是分别进行解析和执行的。PL/SQL块被数据库内部的PL/SQL引擎提取,将SQL语句取出送给Oracle的SQL引擎处理,两种语句分别在两种引擎中分析处理,在数据
库内部完成数据交互、处理过程。
二.PL/SQL的变量
PL/SQL程序包括了四个部分,在四个部分中,声明部分主要用来声明
变量并且初始化变量,在执行部分可以为变量赋新值,或者在表达式中引
用变量的值,在异常处理部分同样可以按执行部分的方法使用变量。另外,
在PL/SQL程序使用时可以通过参数变量把值传递到PL/SQL块中,也可以通过输出变量或者参数变量将值传出PL/SQL块。
在定义变量、常量标识符时需要注意下面的一些基本规则:
1.定义的标识符名称应该遵循命名规则,在后面将会提到主要的命名
规则;
2.在声明常量和变量的时候可以为其设置初始化值,也可以强制设置
not null;
3.可以使用赋值运算符(:=)或DEFAULT保留字来初始化标识符,为标识符赋初始值;
4.在声明标识符时,每行只能声明一个标识符。
在PL/SQL中主要使用下面三种类型的变量(或者常量):
1.简单变量;
2.复合(组合)变量;
3.外部变量。
三种变量分别用于存放不同特性的数据。
变量一般都在PL/SQL块的声明部分声明,PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,要在执行或异常处理部分使用变量,那么变量必须首先在声明部分进行声明。
声明变量的语法如下:
Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]
注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件,此时变量在初始化时必须赋值。
给变量赋值
给变量赋值有两种方式:
. 直接给变量赋值
X:=200;
Y=Y+(X*20);
. 通过SQL SELECT INTO 或FETCH INTO给变量赋值
SELECT SUM(SALARY),SUM(SALARY*0.1)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;
常量
常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,,他的声明方式与变量相似,但必须包括关键字CONSTANT。常量和变量都可被定义为SQL和用户定义的数据类型。
ZERO_VALUE CONSTANT NUMBER:=0;
这个语句定了一个名叫ZERO_VALUE、数据类型是NUMBER、值为0的常量。
标量(scalar)数据类型
标量(scalar)数据类型没有内部组件,他们大致可分为以下四类:
. number
. character
. date/time
. boolean
表1显示了数字数据类型;表2显示了字符数据类型;表3显示了日期和布尔数据类型。
表1 Scalar Types:Numeric
Datatype Range Subtypes description
BINARY_INTEGER -214748-2147483647 NATURAL
NATURAL
NPOSITIVE
POSITIVEN
SIGNTYPE 用于存储单字节整数。
要求存储长度低于NUMBER值。
用于限制范围的子类型(SUBTYPE): NATURAL:用于非负数
POSITIVE:只用于正数
NATURALN:只用于非负数和非NULL值POSITIVEN:只用于正数,不能用于NULL 值
SIGNTYPE:只有值:-1、0或1.
NUMBER    1.0E-130-9.99E125 DEC
DECIMAL
DOUBLE
PRECISION
FLOAT
sql语句查询结果取反INTEGERIC
INT
NUMERIC
REAL
SMALLINT 存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法:
number[([,])]。
缺省的精度是38,scale是0.
PLS_INTEGER -2147483647-2147483647  与BINARY_INTEGER基本相同,但采用机器运算时,PLS_INTEGER提供更好的性能。
表2 字符数据类型
datatype rang subtype description
CHAR 最大长度32767字
CHARACTER 存储定长字符串,如果长度没有确定,缺省是  1
LONG 最大长度
2147483647字节
存储可变长度字符串
RAW 最大长度32767字
用于存储二进制数据和字节字符串,当在两个数据库
之间进行传递时,RAW数据不在字符集之间进行转
换。
LONGRAW 最大长度
2147483647
与LONG数据类型相似,同样他也不能在字符集之
间进行转换。
ROWID 18个字节与数据库ROWID伪列类型相同,能够存储一个行标示符,可以将行标示符看作数据库中每一行的唯一键值。
VARCHAR2 最大长度32767字
STRINGVARCHAR
与VARCHAR数据类型相似,存储可变长度的字符
串。声明方法与VARCHAR相同
表3 DATE和BOOLEAN
datatype range description
BOOLEAN TRUE/FALSE 存储逻辑值TRUE或FALSE,无参数
DATE 01/01/4712 BC 存储固定长的日期和时间值,日期值中包含时间
LOB数据类型
LOB(大对象,Large object) 数据类型用于存储类似图像,声音这样的大型数据对象,
LOB数据对象可以是二进制数据也可以是字符数据,其最大长度不超过4G。LOB数据类型支持任意访问方式,LONG只支持顺序访问方式。LOB存储在一个单独的位置上,同时一个"LOB定位符"(LOB locator)存储在原始的表中,该定位符是一个指向实际数据的指针。
在PL/SQL中操作LOB数据对象使用ORACLE提供的包DBMS_LOB.LOB数据类型可分为以下四类:
. BFILE
. BLOB
. CLOB
. NCLOB
操作符
与其他程序设计语言相同,PL/SQL有一系列操作符。操作符分为下面几类:
. 算术操作符
. 关系操作符
. 比较操作符
. 逻辑操作符
算术操作符如表4所示
operator operation
+ 加
-
/ 除
* 乘
** 乘方
关系操作符主要用于条件判断语句或用于where子串中,关系操作符检查条件和结果
是否为true或false,表5是PL/SQL中的关系操作符

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。