我有一个存储过程,我明确地捕获了一个特定的错误,即无效的Emp Name。
发生这种情况时,我将 MESSAGE_TEXT
和 SQLSTATE
设置为特定值。
EXIT HANDLER
然后退出并显示 SQLSTATE
& MESSAGE_TEXT
到存储过程的调用方。这是希望我想要发生,它按预期工作。但是,我还在 EXIT HANDLER
中向Log表中插入一行,由于某种原因,插入到Log表中的值在末尾附加了额外的字符,即
无效的员工姓名offerdee提供的名称
而不是
提供的员工姓名无效。
如果我将消息硬编码到Log表中,它可以正常工作,但我不想这样做。给存储过程调用者的消息正常工作。
以下参考代码
REPLACE PROCEDURE SecAppl.Create_User_SL
(p_UserName CHAR(7)
,p_Password VARCHAR(30)
,p_EmpName VARCHAR(70) /* First Name then Surname */
,p_EmailAddr VARCHAR(100)
)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SET vSQL_ERR_CDE = SQLCODE;
SET vSQL_STATE = SQLSTATE;
SET vSQL_ERR_MSG = '';
GET DIAGNOSTICS EXCEPTION 1 vSQL_ERR_MSG = MESSAGE_TEXT;
INSERT INTO Log_Table
VALUES (p_UserName, 'SQLEXCEPTION' , :SQLCODE, :SQLSTATE, vSQL_ERR_MSG, CURRENT_TIMESTAMP);
RESIGNAL; -- Send message back to caller of Proc
END;
IF p_EmpName = ''
THEN SIGNAL SQLSTATE VALUE 'U0001' SET MESSAGE_TEXT = 'Invalid Employee Name provided';
END IF;
END;
任何帮助都会很棒。