存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。而用户通过指定存储过程的名字和参数(如果存储过程带有参数)来执行它。PL/SQL(Procedural Language/ SQL)是编写数据库存储过程的一种过程语言,它结合SQL数据库操作能力和过程化语言的流程控制能力,是SQL的过程化扩展。
1、PL/SQL简介
1)PL/SQL的块结构
基本的SQL是高度非过程化的语言,它最基本的结构是块。所有PL/SQL程序都是由块组成,块之间可以相互嵌套,每个块完成一个逻辑操作。
2)变量定义
变量名 数据类型 [ [NOT NULL] := 初值表达式] 或 变量名 数据类型 [ [NOT NULL] 初值表达式]
3)常量定义
变量名 数据类型 CONSTANT := 常量表达式
常量必须给一个值,并且该值在存在期间或常量作用域内不能改变。如果试图修改它,PL/SQL将返回一个异常。
4)赋值语句
变量名称 := 表达式
DECLARE /*定义的变量、常量等只能在该基本块中使用*/ 定义部分 -----------变量、常量、游标、异常等 /*当基本块执行结束时,定义就不在存在*/ BEGIN -----------SQL 语句、PL/SQL的流程控制语句 执行部分 EXCEPTION /*遇到不能继续执行的情况称为异常*/ ------------异常处理部分 /*在出现异常时,采取措施来纠正错误或报告错误*/ END; |
5)控制结构
PL/SQL提供了流程控制语句,主要有条件控制语句和循环控制语句。其余高级语言类似,在此不再赘述。
条件控制语句:
IF-THEN-END IF、IF-THEN-ELSE-END IF
循环控制语句:
LOOP-END LOOP、WHILE LOOP-END LOOP、FOR-LOOP-END LOOP
2、存储过程
PL/SQL块主要有两种类型:命名块和匿名块。其中匿名块每次执行时都要进行编译,它不能被存储到数据库中,也不能在其他的PL/SQL块中调用。存储过程是命名块,在编译后存储到数据库中,可以被反复调用,运行速度快。
1)优点
- 由于存储过程是存储在数据库中,因而其运行效率高,提供了服务器端快速执行SQL语句的有效路径。
- 客户机应用程序只需通过网络向服务器发送存储过程的名字和参数,就可以让RDBMS执行多条SQL语句,并进行数据处理操作,而只有最终处理结果才返回客户机,因此降低了客户机与服务器之间的通信量。
- 可以把企业规则的运算程序写成存储过程放入数据库服务器中,由RDBMS管理。既有利于集中控制,又能够方便地进行维护。
2)创建存储过程
CREATE Procedure 过程名([参数1, 参数2, ...] ) /*存储过程首部*/
AS
<PL/SQL块>; /*存储过程体,描述存储过程的操作*/
存储过程包括首部和过程体,其中:
- 过程名:数据库服务器合法的对象标识符
- 参数列表:用名字来标识调用时给出的参数值,必须指定值得数据类型,存储过程的参数也可以定义输入参数、输出参数或输入/输出参数。默认为输入参数。
- 过程体:是一个<PL/SQL块>.包含声明部分和可执行语句部分。
注意:可以使用ALTER Procedure 过程名1 RENAME TO 过程名2;
3)执行存储过程
CALL/PERFORM Procedure 过程名([参数1,参数2,...]);
4)删除存储过程
DROP PROCEDURE 过程名();