SQL是一种典型的非过程化程序设计语言,这种语言的特点是:
只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这
些操作是如何执行的,则未被指定。非过程化程序设计语言的优点
在于它的简单易学,因此已经成为关系数据库访问和操纵数据的标
准语言。
与之相对应的是过程化程序设计语言,我们平常熟悉的各种高
级程序设计语言都属于这一范畴。这种语言的特点是:一条语句的
执行是与其前后的语句和控制结构(如条件语句、循环语句等)相
关的。与SQL相比,这些语言显得比较复杂,但优点是使用灵活,
数据操纵能力非常强大。
为了弥补SQL在过程化控制方面的不足,许多商用数据库系统,
都对标准SQL语言进行了扩充,增加了过程化控制部分,即所谓的
PL/SQL。当然不同的数据库系统所做的扩充程度是很不同的。
这里仅以SQL99/PSM为例(SQL99为对象关系型数据库的最新语
言标准),说明一个完整的PL/SQL应该具有哪些语言成分:
BEGIN...END语句 ---- 复合语句
DECLARE语句 ---- 变量声明语句(当然也包括游标、临时表、
异常条件等的声明)
CALL语句 ---- 函数调用语句
RETURN语句 ---- 函数返回语句
SET语句 ---- 赋值语句
IF语句 ---- 条件语句
CASE语句 ---- 条件分支语句
LOOP语句 ---- 循环语句1(相当于C中的WHILE(1))
REPEAT语句 ---- 循环语句2(相当于C中的DO...WHILE语句)
WHILE语句 ---- 循环语句3
ITERATE语句 ---- 跳转语句1(相当于C中的CONTINUE语句)
LEAVE语句 ---- 跳转语句2(相当于C中的BREAK语句)
FOR语句 ---- 迭代语句(相当于BAT中的FOR),即对由一游
标表示的数据集中的每一元素执行一组给定的操作。
SIGNAL、RESIGNAL语句 ---- 异常处理语句
PL/SQL主要用于书写存储过程和触发器的动作体,由于是解释
执行,性能并不高,但也使得系统的强壮性比较有保障。当然,无
论是使用的灵活程度,还是表达式的复杂程度,这种语言同高级程
序设计语言(如C语言)相比还是相去甚远的。
因此,象ORACLE、DB2这样的数据库系统,对于一些性能要求
较高的任务,都允许在PL/SQL中直接使用以高级程序设计语言编写
的外部过程(通常是由嵌入式SQL实现的,好象只有DB2允许直接用
高级程序设计语言书写),当然如何编写这些外部过程,是有很多
限制的(例如DB2要求用户在使用前先设置所谓的“围栏”),这
取决于各种数据库系统的具体实现。
用高级程序设计语言,以编译执行方式来访问数据库,最大的
问题是如何保证数据库不会因应用的错误而崩溃。如何做到这一点,
并没有看上去那么简单,关于这方面的技术,已经超出了本文的讨
论范围。
最后,如果你想了解关于ORACLE系统的PL/SQL的详细使用细节,
请访问ftp://210.32.132.203/pub/document/Oracle8i文档/PL-SQL
使用手册。
--
在那个洪水滔天的世界里,
正直的心感到了寂寞,
当理想终于被现实淹没时,
我选择了沉沦。