You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2/iSeries存储过程如何捕获数据类型不匹配错误?

捕获DB2/iSeries存储过程中数据类型不匹配的错误

我有一个从无人监控系统调用的DB2/iSeries存储过程,需要捕获所有发生的错误。目前能捕获数据格式合规时的错误,但无法捕获数据类型不匹配的错误。求问如何捕获这类由格式错误数据引发的错误?

补充说明:任何可捕获该错误的方案均可,不局限于存储过程内部。若知晓此类错误的日志存储位置,也能提供帮助,任何相关信息都有用。


测试用存储过程代码

CREATE OR REPLACE PROCEDURE test_error_trap (
  IN_TEST_DATA_01 DECIMAL(10,0) DEFAULT 0,
  IN_TEST_DATA_02 CHAR(50) DEFAULT ' '
)

SPECIFIC SPROC001

LANGUAGE SQL
MODIFIES SQL DATA

BEGIN

DECLARE Exit HANDLER FOR SQLEXCEPTION
  BEGIN

    DECLARE sqlstate$ CHAR(5) DEFAULT '00000';
    DECLARE sqlcode#  integer;
    DECLARE sendMSG   varchar(100);

    SET sqlstate$ = SQLSTATE;
    SET sqlcode# = SQLCODE;
    SET sendMSG = 'SQL Error Code from trap = ' || sqlcode#;

    INSERT INTO LOGERROR
    (
      OUT_SQLSTATE,
      OUT_SQLCODE
    )

    VALUES (
      sqlstate$,
      sqlcode#
    );

    SIGNAL SQLSTATE sqlstate$ SET MESSAGE_TEXT = sendMSG;

  END;

INSERT INTO LOGPASS
(
TEST_DATA_01,
TEST_DATA_02
)

VALUES (
IN_TEST_DATA_01,
IN_TEST_DATA_02
);

END;

LABEL ON SPECIFIC PROCEDURE SPROC001 IS 'SQL Error Trap Test';   

LOGPASS表定义

CREATE OR REPLACE TABLE LOGPASS (

-- Test Data 01
TEST_DATA_01
  FOR COLUMN TST01
  DECIMAL(10 , 0)
  DEFAULT 0
  NOT NULL,

-- Test Data 02
TEST_DATA_02
  FOR COLUMN TST02
  CHAR(50)
  DEFAULT ' '
  NOT NULL,

CONSTRAINT LOGPASS_PK PRIMARY KEY
(
 TEST_DATA_01,
 TEST_DATA_02
)
)
RCDFMT PASSREC
;

LABEL ON TABLE LOGPASS IS
'Stored Procedure Pass Log'; 

LOGERROR表定义

CREATE OR REPLACE TABLE LOGERROR (

-- SQL State
OUT_SQLSTATE
  FOR COLUMN ERRSQLS
  CHAR(5)
  DEFAULT ' '
  NOT NULL,

-- SQL Code
OUT_SQLCODE
  FOR COLUMN ERRSQLC
  INTEGER
  DEFAULT 0
  NOT NULL,

-- RECORD TIMESTAMP
OUT_RECORD_TIMESTAMP
  FOR COLUMN DLRECTS
  TIMESTAMP
  DEFAULT CURRENT_TIMESTAMP
  NOT NULL,

CONSTRAINT LOGERROR_PK PRIMARY KEY
(
 OUT_RECORD_TIMESTAMP
)
)
RCDFMT ERRORREC
;

LABEL ON TABLE LOGERROR IS
'Stored Procedure Error Log';  

测试运行情况

  • 运行1:正常运行,无错误
  • 运行2:触发合规性错误,已被存储过程的异常处理器正确捕获并记录到LOGERROR表
  • 运行3:传入错误数据(数据类型不匹配),但未被存储过程捕获,无错误日志记录

内容的提问来源于stack exchange,提问作者Kenneth McKinney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 03:01:35