Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (Deutsch) » SQL Anywhere Server - SQL-Benutzerhandbuch » Gespeicherte Prozeduren, Trigger, Batches und benutzerdefinierte Funktionen » Behandlung von Fehlern und Warnungen

 

Beispiel: Fehlerprotokollierungsprozedur erstellen, sodass sie von einer Ausnahmeroutine aufgerufen werden kann

Sie können eine Fehlerprotokollierungsprozedur definieren, die Sie in Ausnahmeroutinen in mehreren Anwendungen verwenden können, um eine einheitliche Fehlerprotokollierung zu erhalten.

  1. Erstellen Sie die folgenden Tabellen, um Fehlerinformationen zu protokollieren, sobald eine Fehlerprotokollierungsprozedur ausgeführt wird.



    CREATE TABLE IF NOT EXISTS error_info_table (
       idx INTEGER, 
       In UNSIGNED INTEGER, 
       code INTEGER, 
       state CHAR(5),
       err_msg CHAR(256),
       name CHAR(257),
       err_stack LONG VARCHAR,
       traceback LONG VARCHAR
    );
    CREATE TABLE IF NOT EXISTS error_stack_trace_table (
       idx UNSIGNED SMALLINT NOT NULL,
       stack_level UNSIGNED SMALLINT NOT NULL,
       user_name VARCHAR(128),
       proc_name VARCHAR(128),
       line_number UNSIGNED INTEGER NOT NULL,
       is_resignal BIT NOT NULL, PRIMARY KEY (idx, stack_level)
    );
  2. Erstellen Sie die folgende Prozedur, die die Fehlerinformationen in den Tabellen error_info_table und error_stack_trace_table speichert und eine Meldung im Meldungsfenster des Datenbankservers ausgibt:



    CREATE OR REPLACE PROCEDURE error_report_proc ( IN location_indicator INTEGER )
    NO RESULT SET
    BEGIN
       INSERT INTO error_info_table VALUES (
         location_indicator,
         ERROR_LINE(),
         ERROR_SQLCODE(), 
         ERROR_SQLSTATE(),
         ERROR_MESSAGE(),
         ERROR_PROCEDURE(),
         ERROR_STACK_TRACE(),
         TRACEBACK()
       );
       INSERT INTO error_stack_trace_table 
         SELECT location_indicator, *
         FROM sa_error_stack_trace() ;
       MESSAGE 'The error message is '|| ERROR_MESSAGE() ||' and the stack trace is '|| ERROR_STACK_TRACE()
       TYPE WARNING TO CONSOLE ;
    END; 
  3. Erstellen Sie eine Prozedur wie die folgende und rufen Sie die Fehlerprotokollierungsprozedur aus der Ausnahmeroutine auf.



    CREATE OR REPLACE PROCEDURE MyProc()
    BEGIN
       DECLARE column_not_found
         EXCEPTION FOR SQLSTATE '52003';
       MESSAGE 'Hello from MyProc.' TO CLIENT;
       SIGNAL column_not_found;
       MESSAGE 'Line following SIGNAL.' TO CLIENT;
    EXCEPTION
    WHEN column_not_found THEN
       MESSAGE 'Column not found handling.' TO CLIENT;
       CALL error_report_proc();
    END ;    
 Siehe auch