DB2存储过程学习笔记资料.docx
- 文档编号:2321216
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:26
- 大小:30.47KB
DB2存储过程学习笔记资料.docx
《DB2存储过程学习笔记资料.docx》由会员分享,可在线阅读,更多相关《DB2存储过程学习笔记资料.docx(26页珍藏版)》请在冰豆网上搜索。
DB2存储过程学习笔记资料
创建:
db2 - td@ -vfcreateSQLproc .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_nameDATATYPE [DEAFULT value];
2、数组
2.1 定义
CREATE TYPE mynames as VARCHAR(30 ) ARRAY [];--定义数组
2.2 声明
DECLARE nameArrmynames;--声明数组
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,使用VALUESINTO 语句
VALUES 1 INTO TESTARR[1 ];--方法 3,使用SELECTINTO 语句
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
ELSEIF
ELSE
END IF ;
IF FRIEND='张三' THEN
SET MSG ='你好,张三 ';
ELSEIFFRIEND=' 李四' 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),(2 ),(3)) AS TEMP(I )
DO
SET NUM =NUM+ I;
END FOR ;
--循环LOOP
LABEL:
LOOP
LEAVELABEL;
END LOOP LABEL;
TEST_LOOP:
LOOP
SET NUM =NUM+ I;
SET I =I+1 ;
IF I >10 THEN
LEAVETEST_LOOP ;
END IF;
END LOOP TEST_LOOP;
--循环Repeat
REPEAT
UNTIL
END REPEAT ;
REPEAT
SET NUM= NUM+I ;
SET I= I+1 ;
UNTILI>10
END REPEAT ;
--其他关键字
ITERATE label -- 。
在SQLPL 中, ITERATE和LEAVE 实现相同的作用
LEAVElabel
GOTO label
RETURN < result>
4异常处理
SQLCODE 是在 每一条 SQL 语句执行后收到的代码。
SQLSTATE 是 一个遵守 ISO/ANSISQL92 标准的长为 5个字 符的字符串,通常,几 个SQLCODE 可能对应一个 SQLSTATE。
--要在 SQLPL 中使用 SQLCODE和 SQLSTATE,我们必要先声明它们,如下:
DECLARE SQLCODE INT DEFAULT 0;
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
--自定义异常
DECLARE < condition-name > CONDITION FOR SQLSTATE
DECLARE mytrucCONDITION FOR SQLSTATE '01004'; --定义一个字符串数据被截断的异常,名字为 mytruc
--默认的3 种异常
SQLSTATE='01XXX' SQLWARNING
SQLSTATE='02000' NOT FOUND
其他SQLSTATE SQLEXCEPTION
--抛出异常信息
SIGNAL SQLSTATE
CREATE PROCEDURE TESTSIGNAL (
IN FRIEND VARCHAR(10 )
)
LANGUAGE SQL
BEGIN
DECLARE myexceptCONDITION FOR SQLSTATE '70000' ;--声明异常
IF FRIEND ='李四 ' THEN --对输入参数进行验证
SIGNALmyexcept 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 myexceptCONDITION FOR SQLSTATE '70000' ;
DECLARE EXIT HANDLER FOR SQLEXCEPTION SELECT SQLSTATE , SQLCODE INTO state_out, code_out FROM SYSIBM.SYSDUMMY1 ; -- 定义异常处理程序
IF FRIEND ='张三 ' THEN
SIGNALmyexcept SET MESSAGE_TEXT = '输入参数不能为张三 ';
END IF;
END!
5获取前面执行的SQL语句的相关信息
--前面执行的SQL 语句处理的行数
--前面执行的SQL 语句返回的 DB2 错误或警告消息文本
--与前一个CALL 语句相关联的过程返回的状态值
GET DIAGNOSTICS
condition-information :
EXCEPTION 1
CREATE PROCEDURE TESTPROC1 (IN CH1 CHAR
(2))
BEGIN
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE SQLSTATE CHAR (5) DEFAULT '';
DECLARE ERR_MSG VARCHAR(70 );
DECLARE R_STATE INTEGER DEFAULT 0 ;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION --声明异常处理模块
BEGIN
GET DIAGNOSTICS EXCEPTION 1 ERR_MSG =MESSAGE_TEXT; --获取前面执行的 SQL 语句返回的错误或警告消息
SET R_STATE=1;
END;
INSERT INTO TEST VALUES (CH1);
RETURN R_STATE ;
END!
----------------------------------
CREATE PROCEDURE TESTPROC (OUT R_COUNT INTEGER, OUT R_STATE INTEGER)
P1:
BEGIN
SET R_COUNT =0;
SET R_STAT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DB2 存储 过程 学习 笔记 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)