【发布时间】:2019-04-19 10:12:16
【问题描述】:
我有这个程序:
CREATE OR REPLACE PROCEDURE LOG_TEST
( IN QUERY VARCHAR(24576),
IN LOGTBL_VAR VARCHAR(20) )
LANGUAGE SQL
SPECIFIC LOG_TEST
BEGIN
DECLARE SQLCODE INTEGER DEFAULT 0;
DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE V_QUERY VARCHAR(24576);
DECLARE V_ERRORMSG VARCHAR(2048) DEFAULT '';
DECLARE V_SQLCODE INTEGER DEFAULT 0;
DECLARE V_SQLSTATE CHAR(5) DEFAULT '00000';
DECLARE V_INS_STRING VARCHAR(1024);
DECLARE STMT STATEMENT;
DECLARE STMT_INS STATEMENT;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION, SQLWARNING,NOT FOUND
BEGIN
GET DIAGNOSTICS
EXCEPTION
1 V_ERRORMSG = MESSAGE_TEXT;
VALUES(SQLSTATE,SQLCODE)INTO V_SQLSTATE, V_SQLCODE;
END;
SET V_QUERY = QUERY;
PREPARE STMT FROM V_QUERY;
EXECUTE STMT;
SET V_QUERY = REPLACE(V_QUERY,'''', '''''');
SET V_INS_STRING= 'INSERT INTO '||LOGTBL_VAR||'(QUERY, SQL_CODE, SQL_STATE, ERROR_MSG, BEZUG, TIME) VALUES ('''||V_QUERY||''', '||V_SQLCODE||', '''||V_SQLSTATE||''', '''||V_ERRORMSG||''')';
PREPARE STMT_INS FROM V_INS_STRING;
EXECUTE STMT_INS;
END@
程序运行良好,一切都很好,但只有一件事。如果通过参数给出的查询无效,我总是得到 SQLCODE -727 和 SQLSTATE 56098,这是过程本身的一般错误,但是我需要查询导致的 SQLCODE 和 SQLSTATE,以便我可以看到有什么问题查询自己。我怎么能得到那个?
我在 Windows v10.5 上运行 DB2
有什么想法吗?
谢谢。
【问题讨论】:
标签: sql stored-procedures error-handling db2