关键词不能为空

当前您在: 主页 > 英语 >

DB2存储过程快速入门.

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-01 02:02
tags:

-

2021年3月1日发(作者:坎)



1.1 SQL


过程的结构



命名规则:



1


、清洗过程名称命名:


< p>
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 eSheetDayly


定义了过程名称



参数列表为


Out ProcState varchar(100


其定义


SQL

过程从客户应用获取,或返回客户应用的


0


个或多个参数, 参数


列表使用逗号侵害各个参数



参数类型有三种:



l IN


从客户应用检索值。其不能够在


SQL


过程体中修改



l OUT


向客户应用返回值



l INOUT


从客户应用检索值,并返回值



省略了结果集数量的定义,


default

< br>为


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


过程体



过程体存储过程的逻辑内容,包括变量声明、条件控制、流控制语句、以及通

< p>


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


声明、设置变量



< br>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

< br>值时,会产生一个条件,表示出现


了错误、数据没有找到或者警告。



条件处理器可以决定


SQL

过程将如何响应一个或多个已定义的条件或预定义


条件组。其语法如下:

< p>


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>10 0


的条件



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






END IF;


3



LOOP

多次执行一个代码块,直到


LEAVE(


跳出循环




ITERATE(


跳至标签循环的开





GOTO(


跳至指定标签块





例如:



76~161


行,请注意其中的


76< /p>



77



152



153



1 61


行,它们与


51~55


行的条


件处理器一同控制着循环流程。



4



WHILE


WHILE


条件


DO




END WHILE;


5



CASE


基于一个或多个条件的评估选择执行路径,


WHEN


子句将直接值与


CASE



达式中规定的变量进行比较。



例如:



87~128




1.2.3



SQL


过程体中使用


SQL


语句



1




直接使用



过程体中可以直接使用


SQL


语句。



例如:






62


行:


s elect date(days(sDate+1 into today from


State;


查询得到的结果将通过


into


的方式赋给


SQL


过程变量


today





90< /p>


行:


insert into ctBalanceSheet values ( vDateCode ,vNodeCode,


vCurrencyCode, '01170', vBal


向表插入一条记录。



2




使用结果集



具体步骤如下:



1


声明游标



语法:



DECLARE


游标名


CURSOR WITH HOLD FOR


SELECT


语句;



WITH HOLD


表示打开游标保留打开状态,且这个游标定 位在结果表的下一逻


辑行的前面;



还可以用


WITH RETURN


指定 此游标用作存储过程中返回的结果集


合。



例如:



37~49


行,


declare curAsset cursor with hold for…


;定义了


curAsset


游标。



2


为结果集打开游标



打开游标,以便于它可以用于从其结果表中提取行。



语法:





OPEN


游标名;



例如:



69


行,


open curAsset;


3


从结果集中取得查询数据



使用


FETCH


语句,它将游标定位 在其结果表中的下一行上,并给主机变量分


配这个行的值。



语法:



FETCH


游标名


INTO


主机变量



例如:



70~72




FETCH curAsset INTO vNodeCode,vCurrencyCode,vBalSubjItemCode,vBal;


if at_end<>0 then goto Exit1;


end if;


此例应与


51~55


行的条件处理器一起理解。



当正常取到数据时,将游标的结果表中的数据赋给


INTO


后的主机变量列表中


的对应变量。


< /p>


如果游标定位于结果表的未端


(


结果表为 空时也是



时,将产生一个


NOT F OUND


条件,根据


51~55


行的声 明,将在处理器操作中改变


vProcState



at_end


的值。处理器操作完成后,继续处理下面的语句

< p>
71


行。



4


关闭结果集



当游标使用完后,需要将其关闭。



语法:





CLOSE


游标名



例如:



162


行,


close curAsset;


如果


CREATE PROCEDURE


语句中的定义的返回结果集个数不为


0


,且此结


果集需要被返回给调用者时,则不能够被关闭。



3




使用动态


SQL


语句



具体步骤如下:



1


通过


DECLARE


语句声明


VARCHAR


类型变量作为


SQL


语句字符串



例如:第


9


行,


declare stmt varchar(1000;


declare stmt1 varchar(1000;


2



SQL


语句字符串



赋值。用户不能够在语句 字符串中直接包含变量,相


反,必须使用?作为在语句中所使用的变量的参数标记符。< /p>



例如:



第< /p>


63


行,


set stmt='delete from ctBalanceSheet';


set stmt1 = 'insert into test_info values( ? ,? ';


3


使用


PREPARE


语句从语句字符串中生成经过准备的语句。



例如:




6 4


行,


prepare DelStmt from stmt;


prepare ps from stmt;




4


使用


EXECUTE


语句执行经准备的语句。如


SQL


语句字符串



包含了参数标

< p>
记符,可以利用


USING


子句将变量值替代参数标记符。



例如:




6 5


行,


execute DelStmt;


execute ps using v_a1,v_a2;


1 SQL


存储过程说明


< p>
请参见参考程序



资产负债


.sql ”



(1 Create Procedure eSheetDayly ( Out ProcState varchar(100


(2 Language SQL


(3 --------- -------------------------------------------------- -------------


(4 -- SQL Procudure


(5 -- Jun 12,2002


(6 -- Last Modification in Oct,2002


(7 ----------- -------------------------------------------------- -----------


(8 P1:Begin


(9 declare stmt varchar(1000;


(10 declare vProcState varchar(100;


(11 declare today date;


(12 declare vTable char(40;




(13 declare sqlcode int default 0;


(14 declare sqlstate char(5 default '00000';


(15 declare vAction varchar(100;


(16 declare vDateCode int;


(17 declare vNodeCode char(4;


(18 declare vCurrencyCode char(2;


(19 declare vBalSubjItemCode char(6;


(20 declare vBal decimal(16,2;


(21 declare vLastNodeCode char(4;


(22 declare vLastCurrencyCode char(2;


(23 --


期收期付款项



(24 declare vBal301 decimal(16,2 default 0;


(25 --


系统内款项



(26 declare vBal302 decimal(16,2 default 0;


(27 --


存放海外分支机构款项



(28 declare vBal303 decimal(16,2 default 0;


(29 --


海外分支机构



(30 declare vBal304 decimal(16,2 default 0;


(31 --


拨入营运资金



-


-


-


-


-


-


-


-



本文更新与2021-03-01 02:02,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/685127.html

DB2存储过程快速入门.的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文