PL/SQL程序设计简介
一、什么是PL/SQL?
PL/SQL是 Procedure Language & Structured Query Language 的缩写。
ORACLE的SQL是支持ANSI(American national Standards Institute)和ISO92 (International Standards Organization)标准的产品。PL/SQL是对SQL语言存储过程语言的扩展。从ORACLE6以后,ORACLE的RDBMS附带了PL/SQL。它现在已经成为一种过程处理语言,简称PL/SQL。
目前的PL/SQL包括两部分,一部分是数据库引擎部分;另一部分是可嵌入到许多产品(如C语言,JAVA语言等)工具中的独立引擎。可以将这两部分称为:数据库PL/SQL和工具PL/SQL。两者的编程非常相似。都具有编程结构、语法和逻辑机制。工具PL/SQL另外还增加了用于支持工具(如ORACLE Forms)的句法,如:在窗体上设置按钮等。
二、PL/SQL的特征
1. 有利于客户/服务器环境应用的运行
对于客户/服务器环境来说,真正的瓶颈是网络上。无论网络多快,只要客户端与服务器进行大量的数据交换,应用运行的效率自然就回受到影响。如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器端来执行,自然就省去了数据在网上的传输时间。
2. 适合于客户环境
PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL。对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL程序运行。
3. 模块化
PL/SQL程序结构是一种描述性很强、界限分明的块结构、嵌套块结构,被分成单独的过程、函数、触发器,且可以把它们组合为程序包,提高程序的模块化能力。
4. 过程化
PL/SQL是Oracle在标准SQL上的过程性扩展,不仅允许在PL/SQL程序内嵌入SQL语句,而且允许使用各种类型的条件分支语句和循环语句,可以多个应用程序之间共享其解决方案。
5. 提供大量内置程序包
ORACLE提供了大量的内置程序包,通过这些程序包能够实现DBS的一些低层操作、高级功能,不论对DBA还是应用开发人员都具有重要作用。
6. 运行错误的可处理性
使用PL/SQL提供的异常处理(EXCEPTION),开发人员可集中处理各种ORACLE错误和PL/SQL错误,或处理系统错误与自定义错误,以增强应用程序的健壮性。
简单总结,PL/SQL的优点就是:
- 减少网络流量,提高应用程序性能
- 具有良好的兼容性,不同的开发工具可以使用相同的PL/SQL脚本
- 提供模块化程序开发能力,简化了开发和维护
- 提供了程序控制结构,增强的业务处理能力
- 提供了异常处理,让PL/SQL程序更健壮
当然除了这些优点外,PL/SQL还有其它的优点,如:更好的性能、可移植性和兼容性、可维护性、易用性与快速性,允许定义标识符以增加程序可读性等。
三、PL/SQL块
PL/SQL程序由三个部分组成,即声明部分、执行部分、异常处理部分。
PL/SQL块的语法结构:
DECLARE --声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数 BEGIN -- 执行部分: 过程及SQL语句,即程序的主要部分 EXCEPTION -- 执行异常部分: 错误处理 END;
注意:执行部分不能省略。
PL/SQL块可以分为:
- 匿名块:没有名称的块,动态构造,是直接执行的块。只能执行一次,可调用其它程序,但不能被其它程序调用。
- 命名块:是带有名称的块,这个名称就是标签。命名块可分为:
- 子程序:存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其它程序中调用它们。
- 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。
- 程序包:存储在数据库中的一组子程序、变量定义。在包中的子程序可以被其它程序包或子程序调用。但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序。
四、PL/SQL的执行机制
PL/SQL语句在执行时,会分成两个部分,SQL语言部分由Oracle数据库内核中的SQL引擎来执行,PL/SQL的块则会由PL/SQL引擎来执行。
SQL引擎始终是位于Oracle数据库里面的,PL/SQL引擎则可以位于Oracle数据库内部,也可以独立于Oracle数据库而存在。独立于Oracle数据库存在的PL/SQL引擎多为一些数据库开发工具所提供,在客户端执行,而不是在服务端执行。
PL/SQL引擎执行PL/SQL中的过程性语句,然后将SQL语句发送给数据库服务器来执行,再将结果返回给执行端。
五、PL/SQL的编译过程
- 首先PL/SQL引擎接收到PL/SQL块
- PL/SQL引擎检查共享池中是否已经存在相同的PL/SQL,若存在则返回,不存在继续。
- PL/SQL引擎对PL/SQL块进行语法检查
- 语法检查通过后编译器为oracle存储数据的程序变量分配一个存储地址,整个过程叫绑定。绑定允许oracle在程序运行时引用存储地址。
- 同时编译器检查对存储对象的引用
- 最后产生伪代码,设置合法状态。
注意:在编译过程中匿名块在执行前就被编译而命名块在执行过程中才进行编译。