第七节 存储过程 (含函数)
一
上一节所创建的PL/SQL 程序块都是匿名的,没有被存储,每次执行后都不可被重用。存储过程是一种命名的PL/SQL 程序块,将程序的业务逻辑放在数据库服务器端实现。使用存储过程的优点:1)java 代码需要与数据库通信方能执行增删改查操作,如果这些操作都是在数据库内部完成显然效率是最高的,存储过程可以在数据库端直接完成操作。并且是经过预编译优化后存储于SQL 内存中,使用时无需再次编译,提高了工作效率;2)存储过程的代码直接存放于数据库中,一般由客户端直接通过存储过程的名字进行调用,减少了网络流量,加快了系统执行速度,例如在进行百万以上的大批量数据查询时,使用存储过程分页要比其他方式分页快得多;3)使用存储过程可以减少S.Q. L. 注. 入. 式. 攻. 击. ,提高系统的安全性,执行存储过程的用户要具有权限才能使用存储过程,没有数据操作权限的用户只能在其控制下间接地存取数据;有些企业如金融银行对数据的安全要求比较严格,通常将这些逻辑都包含在存储过程中,不允许程序员直接操作数据表。
定义
create procedure procedure_name [(parameter[,parameter,...])] is
[local declarations]
begin
execute statements
[exception
exception handlers ]
end [procedure _name]
1 存储过程不能使用declare关键字表示声明部分。 不同于触发器的声明部分。
2 注意它后面可以有 is/as 前面有个括号表示传递的参数,这点不同于触发器。as和is都可以,目前未查到它们的区别。
3 变量可以写成诸如 job_param IN VARCHAR2 default 'SALESMAN' 形式表示有默认值
4 变量不可指定长度。不同于create table语句
5 end后面写过程名,也可以不写,触发器亦是如此。
二 函数
函数与过程非常类似,它也是一种存储在数据库中的命名程序块,并且函数也可以接受零个
或多个输入参数。函数与过程之间的主要区别在于,函数必. 须. 有. 返. 回. 值. 。
定义 :
create [or replace] function function_name (parameter [,parameter])
returne data_type is
[local declarations]
begin
execute statements
[exception
exception handlers]
end [function_name]
1 调用函数时 可以不写括号。(当函数没有参数时,有参数时估计也能不写 不管有没有默认值)