2017-11-07 3 views
0

Ich benutzte die ERROR_NUMBER und ERROR_MESSAGE mit dem folgenden Code zu erhalten:Fehler bei teradata SP Handhabung

DECLARE EXIT HANDLER FOR SQLException 
    BEGIN 

     ROLLBACK/ABORT; 
     SET ERROR_MESSAGE = TMPMSG; 
     SET ERROR_NUMBER = SQLCODE; 
     OPEN cur1; 
     LEAVE #MAIN#; 
    END; 

Aktualisiert:

DECLARE EXIT HANDLER FOR SQLException 
    BEGIN 
     ROLLBACK/ABORT; 
     GET DIAGNOSTICS EXCEPTION 1 ErrMsg_value = MESSAGE_TEXT ; 
     SET ErrCode_value = SQLCODE ; 
    end; 

Aber ich brauche die folgenden Informationen als Well:

ERROR_SEVERITY 
ERROR_STATE 
ERROR_PROCEDURE 
ERROR_LINE 

Gibt es überhaupt etwas zu tun?

+1

Was ist 'TMPMSG'? Nur 'SQLCODE' ist eine eingebaute Variable. Sie verwenden besser 'GET DIAGNOSTICS', um Fehlerinformationen zu erhalten. – dnoeth

+0

Ok, bitte sehen Sie den aktualisierten Inhalt .. gerade so? – KeenLearner

Antwort

0

Da eine Ausnahme einen Rollback verursacht, ist ABORT wahrscheinlich nicht erforderlich (außer in einigen Fällen, wenn Sie eine ANSI-Modus-Sitzung ausführen). Wenn Sie es benötigen, sollte es nach der GET DIAGNOSTICS durchgeführt werden, da es den Diagnosebereich zurücksetzt.

  • ERROR_SEVERITY: Es gibt keine Schwere (nur BTEQ unterstützt dieses Konzept)
  • ERROR_STATE, ERROR_PROCEDURE, ERROR_LINE: Diese Variablen sind SQL Server-Syntax, sie existieren nicht in Standard-SQL/Teradata SQL.
+0

Danke @dnoeth :) – KeenLearner