首页 > 代码库 > 存储过程语法

存储过程语法

DB2中存储过程包括存储过程头和存储过程体

存储过程头
create procedure sum(in  p_a integer,
                     in  p_b integer,
                     out p_s integer)
     language sql
     specific sum_ab
begin
     set p_s = p_a + p_b;
end

a、名称:模式加名称,如:db2admin.reademp
b、参数:1 模式:in/out/inout
                  2 名称:建议以P_开头
                  3 数据类型
c、调用存储过程,如:call sun(100,200,?)
d、删除存储过程 drop procedure sum(integer,integer,integer)
e、dynamic result sets指定了返回的最大结果集数目(后面跟数字)
f、contains sql (不含查询和更新语句)  
   reads sql data:只含查询语句
   modifies sql data:含查询和更新,限制最少
   精确定义以上3项,可提高存储过程执行性能
g、deterministic:对于相同的输入参数,每次返回的结果都是相同的,结果集   放在内存中可以重用,因此可以提高运行性能;
   not deterministic:缺省,不推荐
h、language sql/c/java 分别对应相应语言存储过程
i、called on null input:当输入参数为空值,过程依旧执行,缺省值
j、P昂然meter CCSID:Coded Character Set ID,定义了当字符类的数据传入   和过程中输出的编码模式

存储过程体:
1、declare 变量名 数据类型
2、流程控制
- CASE   根据对一个或多个条件的计算选择执行路径
- FOR    对于表中的每一行执行一个代码块
- GET DIAGNOSTICS 将关于前一个SQL语句的信息返回到一个SQL变量中
- GOTO   控制转移到一个有标签的块(一个或者多个语句的块,由一个唯一的  SQL名称和冒号标识)
- IF     语句(ELSEIF、ELSE)
- ITERATE将流程控制传递到一个有标签的循环的开头
- LEAVE  使程序控制离开一个循环代码块
- LOOP   多次执行一个代码块,直到LEAVE,ITERATE或者GOTO语句控制离开
- REPEAT 重复执行一个代码块,直到指定的搜索条件返回真为止
- RETURN 控制从SQL过程返回给调用者
- SET    将一个值赋值给一个输出变量或者SQL变量
- WHILE  在指定条件为真时重复执行一个代码块

创建:db2 -td@ -vf createSQLproc.db2
调用:db2 call 过程名(参数)
      ...
      end@ (此处的@可替换成其他符号)

存储过程语法