本文共 1524 字,大约阅读时间需要 5 分钟。
----start
GET DIAGNOSTIC 语句用于获取前面执行的 SQL 语句的相关信息,它可以获取以下信息:
1、前面执行的 SQL 语句处理的行数2、前面执行的 SQL 语句返回的 DB2 错误或警告消息文本3、与前一个 CALL 语句相关联的过程返回的状态值
一:语法:
GET DIAGNOSTICS <sql-variable-name>=[ROW_COUNT | DB2_RETURN_STATUS | <condition-information> condition-information:EXCEPTION 1 <sql-variable-name>=[MESSAGE_TEXT | DB2_TOKEN_STRING]
二:示例:
--连接数据库CONNECT TO SAMPLE! --创建测试表CREATE TABLE TEST (A CHAR(1))! --创建存储过程1CREATE 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 --获取前面执行的 SQL 语句返回的错误或警告消息 GET DIAGNOSTICS EXCEPTION 1 ERR_MSG=MESSAGE_TEXT; SET R_STATE=1; END; INSERT INTO TEST VALUES (CH1); RETURN R_STATE;END! --创建存储过程2CREATE PROCEDURE TESTPROC (OUT R_COUNT INTEGER, OUT R_STATE INTEGER)P1:BEGIN SET R_COUNT=0; SET R_STATE=0; --向TEST表插入数据 INSERT INTO TEST (A) VALUES (1),(2); --获取前面执行的 SQL 语句处理的行数 GET DIAGNOSTICS R_COUNT=ROW_COUNT; --调用TESTPROC1 CALL TESTPROC1('AB'); --获取前一个存储过程返回的状态值 GET DIAGNOSTICS R_STATE = DB2_RETURN_STATUS;END P1! --调用存储过程2CALL TESTPROC(?,?)! --删除存储过程DROP PROCEDURE TESTPROC1!DROP PROCEDURE TESTPROC! --删除测试表DROP TABLE TEST! --关闭连接CONNECT RESET!
三:运行示例:
将上面的代码保存为c:/test.sql,然后在DB2 命令窗口中执行如下命令 db2 -td! -vf c:/test.sql
----更多参见:
----声明:转载请注明出处。
----last updated on 2010.2.8
----written by ShangBo on 2010.2.8
----end