- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DB2存储过程学习笔记解析
创建:db2?-?td@?-vf createSQLproc?.db2?--end@ (?此处的@可替换成其他符号?)
调用:?db2?call?过程名(参数?)
1 基础
--声明变量:
DECLARE??variable-name???data-type??DEFAULT?constant?
--赋值:
SET?x=?10;
SET?y=(?SELECT?SUM?(c1)?from?T1);
VALUES?10?INTO?x;
SELECT?SUM?(c1)?INTO?y?from?T1?;
--会话全局变量:
CREATE?VARIABLE?var_name DATATYPE?[DEAFULT?value];
2 、数组
2.1?定义
CREATE?TYPE?mynames?as?VARCHAR(30?)?ARRAY?[];--定义数组
2.2?声明
DECLARE?nameArr mynames;--声明数组
2.3?赋?值
SET?TESTARR=ARRAY[1?,2,?3,4?,5,?6,7?,8,?9,10?];SET?TESTARR?=ARRAY[VALUES?(1),(?2)];--?方法1,使用?SET?语句
SELECT?SUM?(NUM)?INTO?TESTARR[1?]?FROM?(VALUES?(?1),(2?))?AS?TEMP(NUM?);--方法?2,使用VALUES INTO?语句
VALUES?1?INTO?TESTARR[1?];--方法?3,使用SELECT INTO?语句
SET?TESTARR[1]?=1;?--方法4,?使用ARRAY?构造函数
2.4?操作数组的函数
? ARRAY_DELETE:删除数组元素
? TRIM_ARRAY:从右开始删除指定数目?个元素
? ARRAY_FIRST:返回数组中第一?个元素
? ARRAY_LAST:返回数组中最后一?个元素
? ARRAY_NEXT:返回数组下一个元素
? ARRAY_PRIOR:返回数组前一个元素
? ARRAY_VARIABLE:返回参数指定的元素
? ARRAY_EXISTS:判断数组是否有元素
? CARDINALITY:返回数组中元素的?个数
? MAX_CARDINALITY:返回数组中元素的?个数
??UNNEST:将数组转换?为表
3 复合语句
语法:
label:?BEGIN?[?ATOMIC?|?NOT?ATOMIC]?--ATOMIC?关键字封装的复合语句被当作一个处理单元
--变量声明、过程逻辑等
END?label
4?流程控制
--条件判断IF
IF??condition?THEN
????SQL?procedure?statement;
ELSEIF?condition??THEN
????SQL?procedure?statement;
ELSE
????SQL?procedure?statement;
END?IF?;
IF?FRIEND=张三?THEN
????SET?MSG?=你好,张三?;
ELSEIF FRIEND=?李四?THEN
????SET?MSG?=你好,李四?;
ELSE
????SET?MSG?=对不起,我不认识你?;
END?IF?;
--循环While
WHILE??condition
DO
????sql?statements;
END?WHILE?;
WHILE?I=?10
DO
SET?NUM=?NUM+I?;
????SET?I?=I+1?;
END?WHILE?;
--循环for
FOR??loop_name?AS??sql?statements
DO
????sql?statements;
END?FOR?;
FOR?TEST?AS?SELECT?I?FROM?(VALUES(1),(2?),(3))?AS?TEMP(I?)
DO
????SET?NUM?=NUM+?I;
END?FOR?;
--循环LOOP
LABEL:LOOP
sql?statements?;
??? LEAVE LABEL;
END?LOOP?LABEL;
TEST_LOOP:LOOP
????SET?NUM?=NUM+?I;
????SET?I?=I+1?;
????IF?I?10?THEN
??????? LEAVE TEST_LOOP?;
????END?IF;
END?LOOP?TEST_LOOP;
--循环Repeat
REPEAT
sql?statements?;
??? UNTIL?condition?
END?REPEAT?;
REPEAT
SET?NUM=?NUM+I?;
SET?I=?I+1?;
??? UNTIL I10
END?REPE
文档评论(0)