软件开发数据库

db2 存储过程SQLSTATE问题

 
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;--这是我写的错误语句,这里面有多个值,是错误的

求助大侠们
参与2

2同行回答

daijiangbodaijiangbo项目经理山东众阳软件有限公司
我已经知道答案了,怎么关闭主题显示全部
我已经知道答案了,怎么关闭主题收起
软件开发 · 2011-08-08
浏览535
wp28556259wp28556259软件架构设计师CMBC
在标题上注明(已解决)显示全部
在标题上注明(已解决)收起
银行 · 2011-08-08
浏览550

提问者

daijiangbo
项目经理山东众阳软件有限公司
擅长领域: AIXUnix服务器

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2011-08-08
  • 关注会员:0 人
  • 问题浏览:3203
  • 最近回答:2011-08-08
  • X社区推广