分类: Oracle
2008-04-22 19:40:32
1.2.4 PL/SQL
PL/SQL是一种高性能的基于事务处理的语言,近几年中更多的开发人员和DBA开始使用PL/SQL。PL/SQL通过添加在其他过程语言中具有的控制结构来扩展SQL。PL/SQL将SQL的灵活性与第三代语言的功能和可配置性结合在一起。
1. PL/SQL的优点
PL/SQL 不是一个独立的产品,而是一个整合到Oracle服务器和Oracle工具中的技术。PL/SQL是完全可移植的、高性能的事务处理语言,其优点如下。
● PL/SQL是一种高性能的基于事务处理的语言,能运行在任何Oracle环境中,支持所有数据处理命令。通过使用PL/SQL程序单元处理SQL的数据定义和数据控制元素。
● PL/SQL支持所有SQL数据类型和所有SQL函数,同时支持所有Oracle对象类型。
● PL/SQL块可以被命名和存储在Oracle服务器中,同时也能被其他的PL/SQL程序或SQL命令调用,任何客户/服务器工具都能访问PL/SQL程序,具有很好的可重用性。
● 可以通过PL/SQL存储过程对客户机和服务器之间的应用程序逻辑进行分隔,这样,就可以阻止客户机应用程序操纵敏感的Oracle数据。可以限制对Oracle数据的访问,其方法是仅允许用户通过存储过程操纵它。
● PL/SQL代码可以使用任何ASCII文本编辑器编写,所以对任何Oracle能够运行的操作系统都是非常便利的。
● 在不使用PL/SQL的情况下,Oracle必须一次处理一条SQL语句。在网络环境下这就意味着每一个独立的调用都必须被Oracle服务器处理,将会占用大量的服务器时间,同时导致网络拥挤。而PL/SQL是将整个语句块发给服务器,这就降低了网络拥挤。
2. PL/SQL块结构
PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL 程序包含了一个或多个逻辑块。 PL/SQL块可以分为3部分,即声明部分、可执行部分和异常处理部分。其语法如下:
DECLARE |
上述语法中各参数的含义如下。
● declarations是声明部分,包含了变量和常量的数据类型和初始值。这个部分由关键字DECLARE开始,如果不需要声明变量或常量,可以忽略这一部分。
● executable statements是可执行语句,执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。
● handles是异常处理部分,是可选的,在执行过程中出现的异常在处理部分中处理。
3. 变量和常量
PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,可以在任何PL/SQL块、子程序或程序包的声明部分中声明变量。声明变量的语法如下:
Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression] |
上面语法中各参数的含义如下。
● Variable_name是变量名。
● Databyte是为变量指定数据类型。
● Expression是为变量指定默认值。
注意:
使用NOT NULL约束时,必须为变量赋予一个初始值。
也可以在声明部分中声明常量,它的声明方式与变量相似,但必须包括关键字CONSTANT,该关键字必须位于数据类型之前。
4. 数据类型
PL/SQL提供了4种内置数据类型,即标量数据类型、组合数据类型、引用数据类型和LOB类型。
标量数据类型又进一步分为以下4类。
● Number类型,类似于SQL的数据类型,主要用于存储数字数据。
● Character类型,用于存储字符串或字符数据。还包括各种子类型,即 CHAR(用于存储固定长度的字符数据),RAW(用于存储二进制数据或字节串),LONG和LONG RAW,ROWID和UROWID,VARCHAR2(此类型变量可容纳可变长度字符串,VARCHAR2数据类型有两种子类型,即STRING和VARCHAR)。
● Date类型,用于存储固定长度的日期和时间数据。它支持的日期范围为:从公元前4712年1月1日到公元4712年12月31日。
● BOOLEAN类型,用于存储逻辑值TRUE、FALSE或NULL。它们不带任何参数。不能将boolean数据插入到数据库列中。
PL/SQL提供的组合类型是record(记录)、table(表)、varray(可变数组)和nested table(嵌套表)。组合类型的变量包含一个或多个标量变量。
引用类型是REF CURSOR(游标变量)和REF操作符。引用类型可以在程序运行时指定不同的存储位置。
LOB类型用于存储大型对象。大型对象可以是二进制值或字符值,其大小为4GB。有4种类型的LOB,如下所示。
● BLOB(二进制LOB),存储长度最大为4GB的未结构化二进制数据。BLOB可包含视频和图片信息。
● CLOB(字符LOB),存储长度最大为4GB的单字节字符,可用于存储文档。
● NCLOB,存储长度最大为4GB的大型块NCHAR数据。
● BFILE(二进制文件),它将只读二进制数据作为外部文件存储在数据库之外。