DB2存储过程快速入门

上传人:平*** 文档编号:13299636 上传时间:2017-10-23 格式:DOCX 页数:25 大小:32.33KB
返回 下载 相关 举报
DB2存储过程快速入门_第1页
第1页 / 共25页
DB2存储过程快速入门_第2页
第2页 / 共25页
DB2存储过程快速入门_第3页
第3页 / 共25页
DB2存储过程快速入门_第4页
第4页 / 共25页
DB2存储过程快速入门_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《DB2存储过程快速入门》由会员分享,可在线阅读,更多相关《DB2存储过程快速入门(25页珍藏版)》请在金锄头文库上搜索。

1、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 结果集数量是否允许 SQLLANGUAGE SQLBEGINSQL 过程体END范例“资产负债.sql”中第

2、 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

3、不能够执行任何 SQL 语句l COTAINS SQL 可以执行不会读取 SQL 数据,也不会修改 SQL 数据的 SQL 语句l READS SQL DATA 可以包含不会修改 SQL 数据的 SQL 语句l MODIFIES SQL DATA 可以执行任何 SQL 语句,除了不能够在存储过程中支持的语句以外。第 37 行,为注释,标明此为 SQL 过程,编写、最后修改时间。注释为“-”开始的行。第 8 行和最后一行 199 共同标识出 SQL 过程体过程体存储过程的逻辑内容,包括变量声明、条件控制、流控制语句、以及通过SQL 语句处理数据的过程。另例:CREATE PROCEDURE bb

4、gs_to_testinfo (IN var0 INTEGER , out ret INTEGER , out ret_str varchar(5), OUT errorLabel CHAR(32) ) SPECIFIC bbgs_to_testinfoRESULT SETS 1LANGUAGE SQL此定义为创建名为 bbgs_to_testinfo 的存储过程。它有 4 个参数:第一个 IN 参数是INTEGER 类型,第一个 OUT 参数是 INTEGER 类型,第二个 OUT 参数是 VARCHAR(5)类型,第三个 OUT 参数是 CHAR(32)类型。指定的别名为 bbgs_to_

5、testinfo,将返回一个结果集。1.2 SQL 过程体1.2.1 声明、设置变量第 961 行。必须在 SQL 过程体的第一部分中声明变量。必须指定惟一的标识符,声明 SQL 数据类型、并且可以先把指定变量的初始值。变量声明的语法如下:DECLARE 标识符 SQL 数据类型 DEFAULT 默认值1、SQLCODE 、SQLSTATE 变量1314 行。用于在 SQL 过程中处理错误和排错问题。它们的值代表了 SQL 过程体中最后使用的 SQL 过程体中最后使用的 SQL 语句的返回值。 2、游标申明3749 行。declare curAsset cursor with hold for

6、3、条件处理器5061 行。当 SQL 语句返回超过 00000 的 SQLSTATE 值时,会产生一个条件,表示出现了错误、数据没有找到或者警告。条件处理器可以决定 SQL 过程将如何响应一个或多个已定义的条件或预定义条件组。其语法如下:DECALRE 数据类型 HANDLER FOR 条件 ,其有三种处理类型:l CONTINUE 处理器操作完成后,继续执行产生这个条件的语句之后的下一条语句。l EXIT 处理器操作完成后,SQL 过程将终止,并将控制返回给调用者。l UNDO 处理器操作执行之前,DB2 将回滚 SQL 过程中执行的 SQL 操作。完成后,SQL 过程将终止,并将控制返回

7、给调用者。其预定义了 3 个类的条件:l NOT FOUND 标识导致 SQLCODE 值为+100 或 SQLSTATE 值为 02000 的条件。一般在使用 SELECT 语句时出现。l SQLEXCEPTION 标识导致 SQLCODE 值为负的条件l SQLWARNING 警告条件或导致 SQLCODE100 的条件 1.2.2 控制结构流常用的结构:1、 SET为输出参数或者 SQL 变量赋值。例如:set at_end=0;(66 行)set vProcState=char(0)|00000 Success; (164 行)set vBal302=vBal302+vBal;(89

8、行)2、 IFIF 条 dELSEIF 条件 2 THENELSEEND IF;3、 LOOP多次执行一个代码块,直到 LEAVE(跳出循环)、ITERATE( 跳至标签循环的开始) 、GOTO(跳至指定标签块)。例如:76161 行,请注意其中的 76、77、152、153、161 行,它们与 5155 行的条件处理器一同控制着循环流程。4、 WHILEWHILE 条件 DOEND WHILE;5、 CASE基于一个或多个条件的评估选择执行路径,WHEN 子句将直接值与 CASE 表达式中规定的变量进行比较。例如:87128 行1.2.3 在 SQL 过程体中使用 SQL 语句1、 直接使用

9、过程体中可以直接使用 SQL 语句。例如:第 62 行:select date(days(admin.SystemState.dtTransDate)+1) into today from admin.SystemState;查询得到的结果将通过 into 的方式赋给 SQL 过程变量 today。第 90 行:insert into admin.fSubjectBalanceSheet values ( vDateCode ,vNodeCode, vCurrencyCode, 01170, vBal );向表插入一条记录。 2、 使用结果集具体步骤如下:1) 声明游标语法:DECLARE 游

10、标名 CURSOR WITH HOLD FORSELECT 语句;WITH HOLD 表示打开游标保留打开状态,且这个游标定位在结果表的下一逻辑行的前面;还可以用 WITH RETURN 指定此游标用作存储过程中返回的结果集合。例如:3749 行,declare curAsset cursor with hold for;定义了 curAsset 游标。2) 为结果集打开游标打开游标,以便于它可以用于从其结果表中提取行。语法:OPEN 游标名;例如:69 行,open curAsset;3) 从结果集中取得查询数据使用 FETCH 语句,它将游标定位在其结果表中的下一行上,并给主机变量分配这个

11、行的值。语法:FETCH 游标名 INTO 主机变量例如:7072 行FETCH curAsset INTO vNodeCode,vCurrencyCode,vBalSubjItemCode,vBal;if at_end0 then goto Exit1;(72) end if;(73) set vDateCode=days(today)-1;(74) set vLastNodeCode=vNodeCode;(75) set vLastCurrencyCode=vCurrencyCode;(76) l1:(77) loop(78) -轧差项以“借-贷”判断余额方向(79) -3155 以“贷-

12、借”入表(80) -其他 3 字头科目以“借 -贷”判断余额方向(81) -9670 以“贷-借”入表(82) -6999 以“贷-借”入表(83) -其他 1 字头科目、6 字头科目以“借- 贷”入表(84) -其他科目以“贷-借”入表(85) while at_end=0 and vNodeCode=vLastNodeCode and vCurrencyCode=vLastCurrencyCode do(86) begin(87) casewhen vBalSubjItemCode in (1620,2710) then set vBal301=vBal301+vBal;(88) when

13、 vBalSubjItemCode=1170(89) then begin set vBal302=vBal302+vBal;(90) insert into admin.fSubjectBalanceSheet values( vDateCode, vNodeCode, vCurrencyCode, 01170,vBal);(91) end;(92) when vBalSubjItemCode=1175(93) then begin set vBal302=vBal302+vBal;(94) insert into admin.fSubjectBalanceSheet values( vDa

14、teCode, vNodeCode, vCurrencyCode, 01175,vBal);(95) end;(96) when vBalSubjItemCode=1185 then set vBal302=vBal302+vBal;(97) when vBalSubjItemCode=2170(98) then begin set vBal302=vBal302+vBal;(99) insert into admin.fSubjectBalanceSheet values( vDateCode, vNodeCode, vCurrencyCode, 02170,-vBal);(100) end

15、;(101) when vBalSubjItemCode=2175(102) then begin set vBal302=vBal302+vBal;(103) insert into admin.fSubjectBalanceSheet values(vDateCode, vNodeCode, vCurrencyCode, 02175,-vBal);(104) end;(105) when vBalSubjItemCode in (2185,2195,3110,3115,3130,3150,1625,2715)(106) then set vBal302=vBal302+vBal;(107) when vBalSubjItemCode in (1180,2180) t

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号