概述:

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;

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_数据

7.过程参数的三种模式:

IN 用于接收调用程序的值(默认的参数模式)

OUT 用于向调用程序返回值

IN OUT 用于接收调用程序的值,并向调用程序返回更新的值

说明:

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_plsql学习_02

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_数据_03

根据empno计算雇员在扣除税款(税率5%)后的净收入,并将净收入显示出来

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_oracle_04

通过存储过程给表插入数据

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_oracle_05

通过存储过程给表更新数据

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_plsql学习_06

通过存储过程给表删除数据

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_数据库_07

批量插入数据

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_plsql学习_08

带有输出参数

更改员工工资(如果小于2000,则增加500,否则保持不变),并把修改后的工资输出

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_数据库_09

带有输入输出参数

交换参数

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_数据_10

注意:不能直接运行 exec swap(100,200);

不通过变量传递进去的话,存储过程里的赋值操作无法进行。下面是正确运行方式:

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_存储过程_11

存储过程中游标的使用

计算每个部门的平均工资

postgre sql 存储过程 不能有返回值吗 pl sql存储过程_oracle_12

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),

那么系统将会进行锁升级,页级锁会升级成表级锁