Ansicht
Dokumentation
CX_SQL_EXCEPTION - Ausnahmeklasse für SQL Fehler
ROGBILLS - Synchronize billing plans ABAP Short ReferenceDiese Dokumentation steht unter dem Copyright der SAP AG.
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
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 )