CREATE PROCEDURE DWINST.PROC_IDS_DEPBUSALY
(IN IN_MONTH VARCHAR(6)
)
LANGUAGE SQL
NOT DETERMINISTIC
CALLED ON NULL INPUT
MODIFIES SQL DATA
INHERIT SPECIAL REGISTERS
BEGIN
/*变量声明*/
DECLARE SQLCODE INT DEFAULT 0; --SQL返回代码
DECLARE SQLSTATE CHAR(5) DEFAULT '00000'; --SQL默认返回代码00000返回成功
DECLARE V_MSG VARCHAR(60); --日志信息内容:所有的返回信息值
DECLARE V_PROC_FLG INT; -- 1-开始跑批;2-结束跑批
DECLARE V_PROC_SUCC_FLG INT; -- 0-成功;1-失败
DECLARE V_PROC_ID CHAR(5); --kpi代号/存储过程代号
DECLARE V_PROC_NAME VARCHAR(60); --存储过程名称
DECLARE V_PROC_STM TIMESTAMP; --存储过程开始执行时间
DECLARE V_PROC_ETM TIMESTAMP; --存储过程执行结束时间
DECLARE V_SQLCODE INT; --SQL返回代码
DECLARE V_SQLSTATE CHAR(5);
DECLARE V_MONTH CHAR(6); --当前月份
/*错误声明处理 */
--警告处理,退出
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
BEGIN
SET V_MSG = CHAR(SQLCODE)||SQLSTATE||'WARNING' ;
SET V_PROC_FLG=1;
SET V_PROC_SUCC_FLG=0;
SET V_PROC_STM=NULL;
SET V_PROC_ETM=NULL;
CALL DWINST.PROC_BAH_LOG(V_PROC_ID, V_PROC_NAME ,V_PROC_STM,V_PROC_ETM, V_PROC_FLG, V_PROC_SUCC_FLG, V_MSG);
END;
--出错处理,退出
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET V_MSG = CHAR(SQLCODE)||SQLSTATE||'ERROR' ;
SET V_PROC_FLG=2;
SET V_PROC_SUCC_FLG=1;
SET V_PROC_STM=NULL;
SET V_PROC_ETM=CURRENT TIMESTAMP;
ROLLBACK ;
CALL DWINST.PROC_BAH_LOG(V_PROC_ID, V_PROC_NAME ,V_PROC_STM,V_PROC_ETM, V_PROC_FLG, V_PROC_SUCC_FLG, V_MSG);
END;
/* 处理主程序开始 */
/*初始化变量*/
SET V_MONTH = IN_MONTH;
SET V_PROC_ID='00001';
SET V_PROC_NAME = 'PROC_IDS_DEPBUSALY';
SELECT PROC_ID INTO V_MONTH FROM DWINST.PROC_BAH_LOG;--这是我写的错误语句,这里面有多个值,是错误的
/*写入程序开始日志*/
SET V_PROC_FLG=1;
SET V_PROC_SUCC_FLG=0;
SET V_MSG = CHAR(V_SQLCODE)||'存储过程开始执行,SUCCESS!' ;
SET V_PROC_STM=CURRENT TIMESTAMP;
SET V_PROC_ETM=NULL;
CALL DWINST.PROC_BAH_LOG(V_PROC_ID, V_PROC_NAME ,V_PROC_STM,V_PROC_ETM, V_PROC_FLG, V_PROC_SUCC_FLG, V_MSG);
/*==================================================================+
′存储过程主体
+==================================================================*/
--支持重跑,删除当期数据
DELETE FROM DMINST.IDS_DEPBUSALY WHERE DT=V_MONTH;
--
--DECLARE CUR1 CURSOR FOR
--SELECT CM_OPUN_COD FROM DWINST.FDS_GLHHY WHERE YR_MN=V_MONTH ;
/*==================================================================+
′存储过程主体结束
+==================================================================*/
--处理主过程结束,写日志
SET V_PROC_FLG=2;
SET V_PROC_SUCC_FLG=0;
SET V_MSG = CHAR(V_SQLCODE)||'存储过程执行结束,SUCCESS!' ;
SET V_PROC_STM=NULL;
SET V_PROC_ETM=CURRENT TIMESTAMP;
CALL DWINST.PROC_BAH_LOG(V_PROC_ID, V_PROC_NAME ,V_PROC_STM,V_PROC_ETM, V_PROC_FLG, V_PROC_SUCC_FLG, V_MSG);
COMMIT;
END;
我想问的是
--出错处理,退出
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET V_MSG = CHAR(SQLCODE)||SQLSTATE||'ERROR' ;
SET V_PROC_FLG=2;
SET V_PROC_SUCC_FLG=1;
SET V_PROC_STM=NULL;
SET V_PROC_ETM=CURRENT TIMESTAMP;
ROLLBACK ;
CALL DWINST.PROC_BAH_LOG(V_PROC_ID, V_PROC_NAME ,V_PROC_STM,V_PROC_ETM, V_PROC_FLG, V_PROC_SUCC_FLG, V_MSG);
END;
这段程序的SQLSTATE为什么取不到,我call存储过程后,他sqlcode的值是0,sqlstate的值是000000.
SELECT PROC_ID INTO V_MONTH FROM DWINST.PROC_BAH_LOG;--这是我写的错误语句,这里面有多个值,是错误的
求助大侠们