概述:
1.存储过程是用pl/sql语言编写的能完成一定处理功能的存储在数据库字典中的程序
2.命名的plsql块,编译并存储在数据库中
3.存储过程的各个部分:
声明部分、可执行部分、异常处理部分(可选)
4.存储过程的分类:
带参存储过程、不带参存储过程
5.优点:
模块化:将程序分解为逻辑模块
可重用性:可以被任意数目的程序调用
可维护性:简化维护操作
安全性:通过设置权限,使数据更安全
提高性能
6.语法
CREATE [OR REPLACE] PROCEDURE
<procedure name> [(<paramter list>)]
IS|AS
<local variable declaration>
BEGIN
<executable statements>
[EXCEPTION
<exception handlers>]
END;
7.过程参数的三种模式:
IN 用于接收调用程序的值(默认的参数模式)
OUT 用于向调用程序返回值
IN OUT 用于接收调用程序的值,并向调用程序返回更新的值
说明:
根据empno计算雇员在扣除税款(税率5%)后的净收入,并将净收入显示出来
通过存储过程给表插入数据
通过存储过程给表更新数据
通过存储过程给表删除数据
批量插入数据
带有输出参数
更改员工工资(如果小于2000,则增加500,否则保持不变),并把修改后的工资输出
带有输入输出参数
交换参数
注意:不能直接运行 exec swap(100,200);
不通过变量传递进去的话,存储过程里的赋值操作无法进行。下面是正确运行方式:
存储过程中游标的使用
计算每个部门的平均工资
8.存储过程的授权与回收权限,删除存储过程
(1)将过程的执行权限授予其他用户
grant execute on myproc to myuser;
(2)从其他用户回收权限
revoke execute on myproc from myuser;
(3)删除存储过程
drop procedure myproc;
9.存储过程的优化
(1)尽量避免大事务操作,慎用holdlock子句,提高系统并发能力
(2)尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件
提取数据到临时表中,然后再做连接
(3)尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就
应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作
(4)注意存储过程中参数和数据类型的关系
(5)注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),
那么系统将会进行锁升级,页级锁会升级成表级锁