teradata SP 中的错误处理
Error handling in teradata SP
我曾经使用以下代码获取 ERROR_NUMBER 和 ERROR_MESSAGE:
DECLARE EXIT HANDLER FOR SQLException
BEGIN
ROLLBACK/ABORT;
SET ERROR_MESSAGE = TMPMSG;
SET ERROR_NUMBER = SQLCODE;
OPEN cur1;
LEAVE #MAIN#;
END;
更新:
DECLARE EXIT HANDLER FOR SQLException
BEGIN
ROLLBACK/ABORT;
GET DIAGNOSTICS EXCEPTION 1 ErrMsg_value = MESSAGE_TEXT ;
SET ErrCode_value = SQLCODE ;
end;
但我还需要以下信息:
ERROR_SEVERITY
ERROR_STATE
ERROR_PROCEDURE
ERROR_LINE
有办法吗?
由于异常会导致回滚,因此可能不需要 ABORT(除非在某些情况下 运行 ANSI 模式会话)。如果您需要它,应该在 GET DIAGNOSTICS 之后完成,因为它会重置诊断区域。
ERROR_SEVERITY
:没有严重性(只有BTEQ支持这个概念)
ERROR_STATE
,ERROR_PROCEDURE
,ERROR_LINE
:这些变量是SQL服务器语法,它们不存在于标准SQL/Teradata SQL.
我曾经使用以下代码获取 ERROR_NUMBER 和 ERROR_MESSAGE:
DECLARE EXIT HANDLER FOR SQLException
BEGIN
ROLLBACK/ABORT;
SET ERROR_MESSAGE = TMPMSG;
SET ERROR_NUMBER = SQLCODE;
OPEN cur1;
LEAVE #MAIN#;
END;
更新:
DECLARE EXIT HANDLER FOR SQLException
BEGIN
ROLLBACK/ABORT;
GET DIAGNOSTICS EXCEPTION 1 ErrMsg_value = MESSAGE_TEXT ;
SET ErrCode_value = SQLCODE ;
end;
但我还需要以下信息:
ERROR_SEVERITY
ERROR_STATE
ERROR_PROCEDURE
ERROR_LINE
有办法吗?
由于异常会导致回滚,因此可能不需要 ABORT(除非在某些情况下 运行 ANSI 模式会话)。如果您需要它,应该在 GET DIAGNOSTICS 之后完成,因为它会重置诊断区域。
ERROR_SEVERITY
:没有严重性(只有BTEQ支持这个概念)ERROR_STATE
,ERROR_PROCEDURE
,ERROR_LINE
:这些变量是SQL服务器语法,它们不存在于标准SQL/Teradata SQL.