Ansicht
Dokumentation

CX_SQL_EXCEPTION - Ausnahmeklasse für SQL Fehler

CX_SQL_EXCEPTION - Ausnahmeklasse für SQL Fehler

ROGBILLS - Synchronize billing plans   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

Bei der Ausführung von Methoden der Klassen der ADBC Schnittstelle (d.h. der Klassen CL_SQL_*) können Fehler auftreten, die vom Aufrufer behandelt werden können. Tritt ein solcher Fehler auf, z.B. ein Datenbankfehler bei der Ausführung eines SQL Kommandos, so wird eine Ausnahme ausgelöst und ein Objekt der Ausnahmeklasse CX_SQL_EXCEPTION erzeugt, durch dessen Attribute der Aufrufer in einer CATCH-Anweisung innerhalb eines TRY ... ENDTRY Blocks genauere Informationen über die aufgetretene Fehlersituation erhalten kann.

Folgende Attribute können abgefragt werden:

DB_ERROR

Dieses Flag wird immer dann gesetzt, wenn ein SQL Kommando auf der Datenbank nicht erfolgreich ausgeführt werden konnte. In diesem Fall kann über die Attribute SQL_CODE und SQL_MESSAGE eine genauere Fehlerdiagnose erfolgen.

SQL_CODE

Vom Datenbanksystem zurückgegebener SQL Code; nur auswertbar, falls DB_ERROR gesetzt ist.

SQL_MESSAGE

Fehlertext zum SQL Code SQL_CODE; nur auswertbar, wenn DB_ERROR gesetzt ist.

DUPLICATE_KEY

Dieses Flag wird zusätzlich zum Flag DB_ERROR gesetzt, wenn die Ausführung eines INSERT oder UPDATE Kommandos zur Verletzung einer "UNIQUE KEY" Bedingung geführt haette. Der Aufrufer kann somit über dieses Flag unabhängig vom spezifischen SQL_CODE des unterliegenden Datenbanksystems erkennen, ob eine Schlüsselbedingung verletzt ist.

DBOBJECT_EXISTS

Dieses Flag wird zusätzlich zum Flag DB_ERROR gesetzt, wenn bei der Ausführung eines SQL Kommandos festgestellt wurde, daß ein anzulegendes Datenbankobjekt unter diesem Namen bereits auf der Datenbank existiert. Diese Fehlersituation kann z.B. bei der Ausführung einer "CREATE OBJECT ..." Anweisung über die Methode EXECUTE_DDL der Klasse CL_SQL_STATEMENT auftreten.

DBOBJECT_NOT_EXISTS

Dieses Flag wird zusätzlich zum Flag DB_ERROR gesetzt, wenn bei der Ausführung eines SQL Kommandos festgestellt wurde, daß ein im SQL Statement referenziertes Datenbankobjekt in der Datenbank nicht existiert. Diese Fehlersituation kann z.B. bei der Ausführung einer "DROP ..." Anweisung über die Methode EXECUTE_DDL der Klasse CL_SQL_STATEMENT auftreten, aber auch bei der Ausführung einer Query oder DML-Anweisung, wenn eine der angegebene Tabellen nicht auf der Datenbank existiert.

INVALID_CURSOR

Dieses Flag wird gesetzt, wenn Objekte der Klassen CL_SQL_RESULT_SET bzw. CL_SQL_PREPARED_STATEMENT Datenbank-Cursor referieren, die nicht oder nicht mehr gültig sind. Diese Fehlersituation kann z.B. dann auftreten, wenn die Methode NEXT der Klasse CL_SQL_RESULT_SET auch dann noch aufgerufen wird, nachdem die Ergebnismenge bereits vollständig gelesen wurde, d.h. nachdem ein vorangegangener NEXT-Aufruf bereits den Ergebniswert 0 geliefert hat. Eine weitere mögliche Ursache für das Auftreten dieses Fehlers ist die Beendigung der aktuellen LUW (Logical Unit of Work) innerhalb der ABAP Laufzeitumgebung, ausgelöst z.B. durch einen Bildwechsel oder ein explizites COMMIT WORK im ABAP Programm. In diesem Fall findet potentiell ein Wechsel des Workprozesses statt, wobei alle geöffneten Datenbank Cursor ihre Gültigkeit verlieren. Damit verlieren aber alle noch offenen Result Sets bzw. präparierte Statements ihren Bezug zum jeweiligen Datenbank Cursor und nachfolgende Zugriffe darauf führen zu der beschriebenen Fehlersituation.

UNKNOWN_CONNECTION

Beim Aufbau einer Datenbankverbindung wurde ein Verbindungsname angegeben, der nicht in der Verbindungstabelle DBCON enthalten ist.

EXTERNAL_ERROR

Es wurden zu wenige oder zu viele Parameter gebunden. In der Regel finden sich in den entsprechenden Log-/Trace-Files nähere Informationen zur Fehlerursache.

NO_MORE_MEMORY

Es steht nicht genügend Speicher zur Verfügung, z.B. beim Kopieren des SQL-Statements im Kernel. In der Regel finden sich in den entsprechenden Log-/Trace-Files nähere Informationen zur Fehlerursache.

INTERNAL_ERROR

Es ist ein interner Fehler aufgetreten, dessen Ursache außerhalb des Einflussbereichs des Aufrufers liegt. In der Regel finden sich in den entsprechenden Log-/Trace-Files nähere Informationen zur Fehlerursache.

Beziehungen

Beispiel

DATA stmt_ref   TYPE REF TO cl_sql_statement.
DATA sqlerr_ref TYPE REF TO cx_sql_exception.

TRY.
    stmt_ref->exececute_update( `INSERT INTO...` ).
  CATCH cx_sql_exception into sqlerr_ref.
    IF sqlerr_ref->duplicate_key = 'X'.
      WRITE: / 'Duplicate Key'.
    ELSEIF sqlerr_ref->db_error = 'X'.
      WRITE: / 'SQL code =', sqlerr_ref->sql_code,
             / 'SQL message =', sqlerr_ref->sql_message.
    ELSE.
      WRITE: / 'Unknown error occured:', sqlerr_ref->internal_error.
    ENDIF.
ENDTRY.

Hinweise

Weiterführende Informationen

ADBC - ABAP Database Connectivity






ABAP Short Reference   BAL Application Log Documentation  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5859 Date: 20240424 Time: 201919     sap01-206 ( 102 ms )