DB2存储过程快速入门.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1 SQL过程的结构
命名规则:
1、清洗过程名称命名:
PROC_业务主题_目标表(PROC_JY_KJYRLJB 交易主题的卡交易日类聚表)
2、函数名称命名:
PROC_业务主题_函数名(PROC_JY_GETYWZL 交易主题取得卡业务种类函数)
3、变量命名:
VAR_变量描述(VAR_YWZL 业务种类变量)
4、游标命名:
CUR_游标描述(CUR_KJYB 对卡交易表进行游标处理)
语法:
CREATE PROCEDURE 过程名称
(参数列表
DYNAMIC RESULT SETS 结果集数量
是否允许SQL
LANGUAGE SQL
BEGIN
SQL 过程体
END
范例“资产负债.sql ”中
第1行:Create Procedure admin.BalanceSheetDayly定义了过程名称
参数列表为Out ProcState varchar(100
其定义SQL 过程从客户应用获取,或返回客户应用的0个或多个参数,参数列表使用逗号侵害各个参数
参数类型有三种:
l IN 从客户应用检索值。其不能够在SQL 过程体中修改
l OUT 向客户应用返回值
l INOUT 从客户应用检索值,并返回值
省略了结果集数量的定义,default 为0。即表示不返回结果集。
省略了是否允许SQL 的说明。其值指出了存储过程是否会使用SQL 语句,如果使用,其类型如何:
l NO SQL 不能够执行任何SQL 语句
l COTAINS SQL 可以执行不会读取SQL 数据,也不会修改SQL 数据的SQL 语句
l READS SQL DATA 可以包含不会修改SQL 数据的SQL 语句
l MODIFIES SQL DATA 可以执行任何SQL 语句,除了不能够在存储过程中支持的语句以外。
第3~7行,为注释,标明此为SQL 过程,编写、最后修改时间。注释为“--”开始的行。第8行和最后一行199共同标识出SQL 过程体
过程体存储过程的逻辑内容,包括变量声明、条件控制、流控制语句、以及通过SQL
语句处理数据的过程。
另例:
CREATE PROCEDURE bbgs_to_testinfo (IN var0 INTEGER , out ret INTEGER , out ret_str varchar(5, OUT errorLabel CHAR(32
SPECIFIC bbgs_to_testinfo
RESULT SETS 1
LANGUAGE SQL
此定义为创建名为bbgs_to_testinfo的存储过程。它有4个参数:第一个IN 参数是INTEGER 类型,第一个OUT 参数是INTEGER 类型,第二个OUT 参数是VARCHAR(5类型,第三个OUT 参数是CHAR(32类型。指定的别名为
bbgs_to_testinfo,将返回一个结果集。
1.2 SQL过程体
1.2.1 声明、设置变量
第9~61行。
必须在SQL 过程体的第一部分中声明变量。必须指定惟一的标识符,声明SQL 数据类型、并且可以先把指定变量的初始值。变量声明的语法如下:
DECLARE 标识符 SQL 数据类型 [DEFAULT 默认值]
1、SQLCODE 、SQLSTATE 变量
13~14行。
用于在SQL 过程中处理错误和排错问题。它们的值代表了SQL 过程体中最后使用的SQL 过程体中最后使用的SQL 语句的返回值。
2、游标申明
37~49行。
declare curAsset cursor with hold for
3、条件处理器
50~61行。
当SQL 语句返回超过00000的SQLSTATE 值时,会产生一个条件,表示出现了错误、数据没有找到或者警告。
条件处理器可以决定SQL 过程将如何响应一个或多个已定义的条件或预定义条件组。其语法如下:
DECALRE 数据类型 HANDLER FOR 条件[,…]
其有三种处理类型:
l CONTINUE 处理器操作完成后,继续执行产生这个条件的语句之后的下一条语句。 l EXIT 处理器操作完成后,SQL 过程将终止,并将控制返回给调用者。
l UNDO 处理器操作执行之前,DB2将回滚SQL 过程中执行的SQL 操作。完成后,SQL 过程将终止,并将控制返回给调用者。
其预定义了3个类的条件:
l NOT FOUND 标识导致SQLCODE 值为+100或SQLSTATE 值为02000的条件。一般在使用SELECT 语句时出现。
l SQLEXCEPTION 标识导致SQLCODE 值为负的条件
l SQLWARNING 警告条件或导致SQLCODE>100的条件
1.2.2 控制结构流
常用的结构:
1、 SET
为输出参数或者SQL 变量赋值。
例如:
set at_end=0;(66行
set vProcState=char(0||'00000 Success'; (164行
set vBal302=vBal302+vBal;(89行
2、 IF
IF 条d
…
ELSEIF 条件2 THEN
…
ELSE
…