初识PL/SQL

170 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

PL/SQL

什么是PL/SQL

PL/SQL的使用几乎贯穿了整个Oracle的学习过程,也是作为一个初级开发人员必须掌握 的重要知识点。

###认识 PL/SQL

结构化査询语言(Structured Query Language, SQL)是用来访问和操作关系型数据库的 一种标准通用语言,它属于第四代语言(4GL),简单易学,使用它可以很方便地调用相应语句来取得结果。该语言的特点就是非过程化。也就是说,使用的时候不用指明执行的具体方法和途径,即不用关注任何的实现细节。但这种语言也有一个问题,就是在某些情况下满足不了 复杂业务流程的需求,这就是第四代语言的不足之处。

Oracle中的PL/SQL语言正是为了解决这一问题,PL/SQL属于第三代的语言(3GL),也就是过程化的语言,同Java、C#一样可以关注细节,用它可以实现复杂的业务逻辑,是数据库开发人员的利器。

PL/SQL (Procedural Language/Structured Query Language) 是Oracle公司在标准SQL语言 基础上进行扩展而形成的一种可以在数据库上进行设计编程的语言。PL/SQL完全可以像Java语言一样实现逻辑判断、条件循环以及异常处理等,这是标准的SQL很难办到的事情。由于它的基础是标准的SQL语句,这就使得数据库开发人员能快速 地掌握并运用。总的来说,PL/SQL有 以下几个特点:

  • 支持事务控制和SQL数据操作命令。
  • 它支持SQL的所有数据类型,并且在此基础上扩展了新的数据类型,也支持SQL的函数以及运算符。
  • PL/SQL可以存储在Oracle服务器中。
  • 服务器上的PL/SQL程序可以使用权限进行控制。
  • Oracle有自己的DBMS包,可以处理数据的控制和定义命令。

PL/SQL的优势

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

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

如果此时换用PL/SQL语句,结果则不一样了。PL/SQL的语句块可以包含多条SQL语句, 而语句块可以嵌入到程序中,甚至可以存储到Oracle服务器上。这样用户只需要连接一次数据。

(2) 可以使程序模块化

在程序块中可以实现一个或几个功能。

例如,当想把一个动物的模型存到数据库里时,可能涉及几张表,如果使用标准的SQL完成该功能需要多条语句。而如果使用块,则可以把对多张表的操作都放到一个块内,而对外只提供一个调用方式和需要传入的参数。

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

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

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

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

标准的SQL在遇到错误时会提示异常。一旦有异常就会终止,但是调用者 却很难快速地发现错误点在哪儿,即使发现出问题的地方也只能是告诉开发人员该语句程序本身有问题,而不是逻辑上有问题。

例如,在产品表里増加数据时,数量只是要求数值型,并没有更细的要求。假如增加的数据中该字段部分是一个负数,正常来说是可以进入数据库的,但 这在逻辑上是不允许的,因为没有数量为负的产品,而利用PL/SQL就可以完全避免类似的问题,我们可以利用流程拒绝这部分记录进入数据库。

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

(5) 良好的可移植性

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

PL/SQL 的结构

PL/SQL程序的基本单位是块(block),PL/SQL块很明确地分三部分,其中包括声明部分、执行部分和异常处理部分。

其中,声明部分以DECLARE作为开始标志,执行部分用BEGIN作为开始标志,而异常处理部分则以EXCEPTION为开始标志。其中的执行部分是必需 的,而其余的两个部分则可选。

需要记住:无论PL/SQL程序段的代码量有多少,它的基本结构只是由这三部分组成。