7.1.2 PL/SQL的优势

由于PL/SQL语言是从SQL语言扩展而来,所以PL/SQL除了支持SQL数据类型和函数外,同时也支持Oracle对象类型。除此之外,同传统的SQL语言相比PL/SQL有以下几个优点:

(1)可以提高程序的运行性能

标准的SQL被执行时,只能一条一条地向Oracle服务器发送。假如完成一个业务逻辑需要几条甚至几十条SQL语句,那么在这个过程中,客户端会几十次地连接数据库服务器,而连接数据库本身是一个很耗费资源的过程,当这个业务被完成时,会浪费大量的资源在网络连接上。

如果此时换用PL/SQL语句,结果则不一样了。PL/SQL的语句块可以包含多条SQL语句,而语句块可以嵌入到程序中,甚至可以存储到Oracle服务器上。这样用户只需要连接一次数据库就可以把需要的参数传递过去,其他的部分将在Oracle服务器内部执行完成,然后返回最终的结果。这样就大大地节省了网络资源的开销。图7.1描述了PL/SQL同标准的SQL语句多次访问数据库的不同。

7.1.2 PL/SQL的优势 - 图1

图 7.1 普通SQL多条执行同PL/SQL的差异

(2)可以使程序模块化

在程序块中可以实现一个或几个功能。例如,当想把一个动物的模型存到数据库里时,可能涉及几张表,如果使用标准的SQL完成该功能需要多条语句,而如果使用块,则可以把对多张表的操作都放到一个块内,而对外只提供一个调用方式和需要传入的参数。这对于编程开发人员是一个福音,他们不需要再写过多的SQL语句,只需要给出参数并调用一次PL/SQL的程序块就好。这种操作的优势在介绍存储过程后显得尤其明显。

使用块也可以把数据库数据同客户程序隔离开来,使得数据库表结构发生变化时,对调用者的影响减小到最低程度。

(3)可以采用逻辑控制语句来控制程序结构

如果一个PL/SQL程序块中只能顺序地执行基本的SQL语句,那么它的意义实在有限。而实际当中PL/SQL可以利用条件或循环语句来控制程序的流程,这么做就大大地增加了PL/SQL的实用性,我们可以利用逻辑控制语句完成复杂的普通SQL语句完成不了的业务。

例如,实现如下的功能:产品很多种类,而在产品表中,产品的类型需要使用产品类型编码替代,而不是名称,这样当输入记录的时候就需要把产品名称转换成产品编码,在PL/SQL块中就可以利用CASE语句完成判断分类,并把产品名称转换成产品编码。而这些在标准的SQL中很难实现,即便实现了也不是动态的数据。

(4)利用处理运行时的错误信息

标准的SQL在遇到错误时会提示异常。例如增加数据,一旦有异常就会终止,但是调用者却很难快速地发现错误点在哪儿,即使发现出问题的地方也只能是告诉开发人员该语句程序本身有问题,而不是逻辑上有问题。例如,在产品表里增加数据时,数量只是要求数值型,并没有更细的要求。假如增加的数据中该字段部分是一个负数,正常来说是可以进入数据库的,但这在逻辑上是不允许的,因为没有数量为负的产品。而利用PL/SQL就可以完全避免类似的问题,我们可以利用流程拒绝这部分记录进入数据库。

利用PL/SQL还可以处理一些程序上的异常,不至于因终止SQL操作,而造成调用SQL的展示页面出现生硬的错误提示。

(5)良好的可移植性

PL/SQL可以成功地运行到不同的服务器中。例如,从Windows的数据库服务器下移植到Linux的数据库服务器下。也可把PL/SQL从一个Oracle版本移植到其他版本的Oracle中。