1 定义
存储过程,百度百科上是这样解释的,存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。
简单的说就是专门干一件事一段sql语句。可以由数据库自己去调用,也可以由java程序去调用。在oracle数据库中存储过程是procedure。
2 优势
1.效率高
存储过程编译一次后,就会存到数据库,每次调用时都直接执行。而普通的sql语句我们要保存到其他地方(例如:记事本 上),都要先分析编译才会执行。所以想对而言存储过程效率更高。
2.降低网络流量
存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。
3.复用性高
存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。
4.可维护性高
当功能要求发生小的变化时,修改之前的存储过程比较容易,花费精力少。
5.安全性高
完成某个特定功能的存储过程一般只有特定的用户可以使用,具有使用身份限制,更安全。
3 形式
基本结构
存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可写可不写,要增强脚本的容错性和调试的方便性那就写上异常处理)
样例
3.1 无参存储过程
3.2 带参存储过程
注:第10行:param1 是参数,类型和student表id字段的类型一样。
第11行:声明变量name,类型是student表name字段的类型(同上)。
第12行:声明变量age,类型数数字,初始化为20
3.3 带参数的存储过程并且进行赋值
其中参数IN表示输入参数,是参数的默认模式。
OUT表示返回值参数,类型可以使用任意Oracle中的合法类型。
OUT模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
IN OUT表示该参数可以向该过程中传递值,也可以将某个值传出去
第4行:查询语句,把参数s_age作为过滤条件,INTO关键字,把查到的结果赋给total变量。
第5行:输出查询结果,在数据库中“||”用来连接字符串
第6—9行:做异常处理
4 基本语法
4.1运算符
4.2 SELECT INTO STATEMENT 语句
4.3 选择语句
IF..END IF
IF..ELSE..END IF
4.4 循环语句
基本循环
while 循环
for循环