存储过程异常捕获

2026/1/27 7:58:54

--业务表

DROP TABLE TestTable; CREATE TABLE TestTable (

T_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ),

T_HalfYear VARCHAR(12) NOT NULL,--格式形如 '2006年上半年' T_Year SMALLINT, PRIMARY KEY (T_ID) );

--存储过程出错日志记录表 DROP TABLE TestLog; CREATE TABLE TestLog (

T_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ),

T_Message VARCHAR(100) NOT NULL,--记录存储过程出错信息 PRIMARY KEY (T_ID) );

--删除该存储过程

DROP PROCEDURE TestProc()@

--创建该存储过程

CREATE PROCEDURE TestProc() LANGUAGE SQL BEGIN

--变量定义

DECLARE sqlcode INTEGER DEFAULT 0; DECLARE sqlstate CHAR(5);

DECLARE v_Message CHAR(100);

--SQL异常处理,插入到错误日志表中 DECLARE exit handler FOR sqlexception BEGIN

--开始异常处理

VALUES ('存储过程 TestProc 调用失败,SQLCode:' || CHAR(sqlcode) || 'SQLState:' || CHAR(sqlstate))

INTO v_Message;

INSERT INTO TestLog(T_Message)

VALUES (v_Message);

--显式提交事务 COMMIT;

--设置存储过程返回值 SIGNAL SQLSTATE '99999'

SET MESSAGE_TEXT = 'TestProc throw error'; END;

--开始实现业务逻辑 UPDATE TestTable

SET T_Year = INTEGER(SUBSTR(T_HalfYear,1,4));

END@

--插入正常的数据,观察存储过程执行情况 INSERT INTO TestTable (T_HalfYear) VALUES ('2006年上半年');

--执行存储过程 CALL TestProc;

------------------------------------------------------------ --CLP

CALL TestProc

返回状态 = 0

SQLCODE: 0

------------------------------------------------------------

--查询业务表

SELECT * FROM TestTable;

------------------------------------------------------------ T_ID T_HalfYear T_Year

0 2006年上半年 2006

------------------------------------------------------------

--插入脏数据,观察存储过程执行情况 INSERT INTO TestTable (T_HalfYear) VALUES ('200年上半年');

--执行存储过程

CALL TestProc;

------------------------------------------------------------ --CLP

CALL TestProc

SQL0438N 应用程序发生错误,诊断文本:\。

SQLSTATE=99999

SQL0438N 应用程序发生错误,诊断文本:\------------------------------------------------------------

--查询业务表

SELECT * FROM TestTable;

------------------------------------------------------------ T_ID T_HalfYear T_Year 0 2006年上半年 2006 1 200年上半年

------------------------------------------------------------

--查询存储过程错误日志表 SELECT * FROM TestLog;

------------------------------------------------------------ T_ID T_Message

0 存储过程 TestProc 调用失败,SQLCode:-420 SQLState:22018

DROP TABLE TestTable; DROP TABLE TestLog;

DROP PROCEDURE TestProc;


存储过程异常捕获.doc 将本文的Word文档下载到电脑
搜索更多关于: 存储过程异常捕获 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219