第一范文网 - 专业文章范例文档资料分享平台

DB2存储过程学习笔记

来源:用户分享 时间:2025/11/16 15:29:25 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

创建: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 TESTARRES (1),( 2)];-- 方法1,使用 SET 语句

SELECT SUM (NUM) INTO TESTARR[1 ] FROM (VALUES ( 1),(2 ))M );--方法 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 复合语句

语法:

=ARRAY[VALUAS TEMP(NU label: BEGIN [ ATOMIC | NOT ATOMIC] --ATOMIC 关键字封装的复合语句被当作一个处理单元

--变量声明、过程逻辑等 END label

4 流程控制

--条件判断IF

IF < condition> THEN

; ELSEIF THEN

; ELSE

; END IF ;

IF FRIEND='张三' THEN

SET MSG ='你好,张三 '; ELSEIF FRIEND=' 李四' THEN SET MSG ='你好,李四 '; ELSE

SET MSG ='对不起,我不认识你 '; END IF ; --循环While

WHILE < condition> DO

; END WHILE ; WHILE I<= 10 DO

SET NUM= NUM+I ; SET I =I+1 ; END WHILE ; --循环for

FOR < loop_name> AS < sql statements> DO

; END FOR ;

FOR TEST AS SELECT I FROM (VALUES(1),(2DO

SET NUM =NUM+ I; END FOR ; --循环LOOP LABEL:LOOP

; LEAVE LABEL;

),(3)) AS TEMP(I ) 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

; UNTIL END REPEAT ; REPEAT

SET NUM= NUM+I ; SET I= I+1 ; UNTIL I>10 END REPEAT ; --其他关键字

ITERATE label -- 。在SQL PL 中, ITERATE和LEAVE 实现相同的作用 LEAVE label GOTO label RETURN < result>

4 异常处理

SQLCODE 是在 每一条 SQL 语句执行后收到的代码。

SQLSTATE 是 一个遵守 ISO/ANSI SQL92 标准的长为 5个字 符的字符串,通常,几 个SQLCODE 可能对应一个 SQLSTATE。

--要在 SQL PL 中使用 SQLCODE和 SQLSTATE,我们必要先声明它们,如下: DECLARE SQLCODE INT DEFAULT 0;

DECLARE SQLSTATE CHAR(5) DEFAULT '00000'; --自定义异常

DECLARE < condition-name > CONDITION FOR SQLSTATE ; DECLARE mytruc CONDITION FOR SQLSTATE '01004'; --定义一个字符串数据被截断的异常,名字为 mytruc --默认的3 种异常

SQLSTATE='01XXX' SQLWARNING SQLSTATE='02000' NOT FOUND 其他SQLSTATE SQLEXCEPTION --抛出异常信息

SIGNAL SQLSTATE SET MESSAGE_TEXT=;

CREATE PROCEDURE TESTSIGNAL (

IN FRIEND VARCHAR(10 ) )

LANGUAGE SQL BEGIN

DECLARE myexcept CONDITION FOR SQLSTATE '70000' ;--声明异常

IF FRIEND ='李

四 ' THEN --对输入参数进行验证

SIGNAL myexcept SET MESSAGE_TEXT = '输入参数不能为李四 '; END IF;

IF FRIEND ='张

三 ' THEN --对输入参数进行验证

SIGNAL SQLSTATE '70000' SET MESSAGE_TEXT = '输入参数不能为张三';

END IF; END!

--异常处理定义

DECLARE [ CONTINUE | EXIT | UNDO ] HANDLER FOR

--CUNTINUE, 当抛出异常后,由对应的异常处理器解决异常,工作流会继续执行抛出异常语句的下一个语句。

--EXIT, 当抛出异常后,相应的异常处理器解决该异常,工作流会直接到程序的末尾。

--UNDO, 当抛出异常后,对应的异常处理器解决此异常,工作流直接到达程序的末尾并且撤销所有已实现的操作,或者回滚所有已执行的语句。 CREATE PROCEDURE TEST ( IN FRIEND VARCHAR(10 ) ,OUT state_out CHAR(5) ,OUT code_out INT) )

LANGUAGE SQL BEGIN

DECLARE SQLCODE INT DEFAULT 0;

DECLARE SQLSTATE CHAR (5) DEFAULT '00000';

DECLARE myexcept CONDITION FOR SQLSTATE '70000' ;

DECLARE EXIT HANDLER FOR SQLEXCEPTION SELECT SQLSTATE , SQLCODE

INTO state_out, code_out FROM SYSIBM.SYSDUMMY1 ; -- 定义异常处理程序

IF FRIEND ='张三 ' THEN

搜索更多关于: DB2存储过程学习笔记 的文档
DB2存储过程学习笔记.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6lik69nll79nplx1m54t1j03v4iv5u00ar2_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top