使用teradata存储过程INSERTED错误的值

时间:2015-03-23 06:14:46

标签: stored-procedures insert teradata

我有一个存储过程,我明确地捕获了一个特定的错误,即无效的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;

任何帮助都会很棒。

0 个答案:

没有答案