[PYTHON] [Einführung in cx_Oracle] (12.) DB-Ausnahmebehandlung

Serialisierungstabelle

Serie: Einführung in den Inhalt von cx_Oracle

Überprüfungsumgebung

cx_Oracle.DatabaseError Die Ausnahme cx_Oracle.DatabaseError ist eine Ausnahme von dem Problem, das bei der Verwendung von cx_Oracle aufgetreten ist. cx_Oracle.DatabaseError selbst ist eine Unterklasse von cx_Oracle.Error, einer Unterklasse des Python-Standardfehlers. Es gibt viele andere cx_Oracle-Ausnahmen, aber sie sind als Unterklassen einer dieser Ausnahmen definiert. Verwenden Sie cx_Oracle.DatabaseError, wenn Sie alle cx_Oracle-Ausnahmen unabhängig von Grundlagen oder Inhalten behandeln möchten.

sample12a.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_aaa"
SQL = """
        select object_id, owner, object_name, object_type
          from all_objects
         order by object_id
         fetch first 5 rows only
"""

with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        cursor = connection.cursor()
        cursor.execute(SQL)
        for row in cursor:
                print(row)
        cursor.close()
$ python sample12a.py
Traceback (most recent call last):
  File "sample12a.py", line 13, in <module>
    with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
cx_Oracle.DatabaseError: ORA-12154: TNS:could not resolve the connect identifier specified

In sample12a.py wird ein TNS-Connector angegeben, der im Inhalt der Variablen DESTINATION in der 4. Zeile nicht vorhanden ist. Wenn Sie es ausführen, tritt daher immer ein Verbindungsfehler auf. Wenn Sie beim Codieren wie in diesem Beispiel keine spezielle Fehlerbehandlung durchführen, erhalten Sie eine Ausnahme von cx_Oracle.DatabaseError. Der Inhalt der Ausnahmemeldung ist die Oracle Database-Fehlernummer (ORA-xxxxx, Ausführungsbeispiel "ORA-12154"), die dem Fehlerinhalt entspricht, und die Fehlermeldung, die der Fehlernummer entspricht (Ausführungsbeispiel "TNS: Verbindung konnte nicht aufgelöst werden"). Kennung angegeben "). Die Fehlermeldung ist in Englisch, da die Umgebungsvariable NLS_LANG beim Ausführen dieses Beispiels nicht angegeben wurde. Wenn Sie japanische Fehlermeldungen erhalten möchten, setzen Sie bitte NLS_LANG.

Liste der Ausnahmen

Zusätzlich zu cx_Oracle.Error und cx_Oracle.DatabaseError werden Ausnahmen für einzelne Ereignisse und Ausnahmen definiert, die von der DB-API angegeben werden.

Ausnahmename Erläuterung
cx_Oracle.InterfaceError cx_Eine Ausnahme vom Problem bei Verwendung der Oracle-Schnittstelle. Als Beispiel cx_Es tritt auf, wenn die Verwendung der Oralce-API nicht korrekt ist.
cx_Oracle.DataError Tritt auf, wenn ein Problem mit dem Dateninhalt vorliegt, z. B. Division durch 0 oder Überlauf von Ziffern.
cx_Oracle.OperationalError ORA-DB-interne Fehler wie 600 und ORA-Es tritt bei Kommunikationsfehlern wie 3135 auf.
cx_Oracle.IntegrityError Tritt auf, wenn Datenintegritätsprobleme auftreten, z. B. Verstöße gegen die referenzielle Integritätsbedingung.
cx_Oracle.InternalError Tritt im Falle eines internen Fehlers auf. ODER EIN-Vordefinierte interne Fehler wie 600 sind cx_Oracle.Da es sich um einen OperationalError handelt, entspricht dies einem internen Problem, das nicht zu diesen Fehlercodes führt. Ein Beispiel ist, wenn Sie auf einen ungültigen Cursor zugreifen.
cx_Oracle.ProgrammingError Ausnahmen zu Programmierproblemen. Ein Beispiel ist, wenn ein Problem mit der von Ihnen ausgegebenen SQL-Anweisung vorliegt.
cx_Oracle.NotSupportedError Nicht existierendes cx_Tritt auf, wenn Sie eine Oracle-Methode aufrufen.
cx_Oracle.Warning Obwohl es definiert ist, weil es in der DB-API vorhanden ist, cx_Es wird in Oracle praktisch nicht verwendet.

Variablen, die durch Ausnahmebehandlung behandelt werden können

Bei der Ausnahmebehandlung kann auf die folgenden schreibgeschützten Variableninformationen verwiesen werden. Diese sind zusammen im Args Taple enthalten.

Variablennamen Erläuterung
_Error.code Oracle Database-Fehlernummer
_Error.offset Fehleroffset
_Error.message Fehlermeldung
_Error.context Fehlerkontextinformationen
_Error.isrecoverable Bool-Typ, ob es sich um einen behebbaren Fehler handelt. Um diese Variable zu verwenden, Oracle Server/12 für beide Kunden.Muss 1 oder später sein. False wird gespeichert, wenn die Versionsbedingung nicht erfüllt ist

Als Beispiel werden die obigen Variablen außerhalb des Beispiels verwendet, wie unten gezeigt. In diesem Beispiel wird die benutzerdefinierte Ausnahmefunktion von PL / SQL verwendet, um absichtlich den ORA-600 zu generieren, den jeder liebt (???).

sample12b.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
declare
  e600 exception;
  pragma exception_init(e600, -600);
begin
  raise e600;
end;
"""
try:
    connection = cx_Oracle.connect(USERID, PASSWORD, DESTINATION)
    cursor = connection.cursor()
    cursor.execute(SQL)
except cx_Oracle.OperationalError as ex:
    error, = ex.args
    print("Ein Fehler ist aufgetreten. Bitte wenden Sie sich mit dem Fehlercode und der Meldung an den Administrator.")
    print("Fehlercode: ", error.code)
    print("Fehlermeldung: ", error.message)
finally:
    cursor.close()
    connection.close()
$ python sample12b.py
Ein Fehler ist aufgetreten. Bitte wenden Sie sich mit dem Fehlercode und der Meldung an den Administrator.
Fehlercode:  600
Fehlermeldung:  ORA-00600:Interner Fehlercode,Streit: [600], [], [], [], [], [], [], [], [], [], [], []
ORA-06512:Zeile 6

Recommended Posts

[Einführung in cx_Oracle] (12.) DB-Ausnahmebehandlung
[Einführung in cx_Oracle] (17.) Datumsbehandlung
[Einführung in cx_Oracle] (5.) Umgang mit japanischen Daten
[Einführung in cx_Oracle] (8.) Version cx_Oracle 8.0
[Einführung in die Udemy Python3 + -Anwendung] 65. Ausnahmebehandlung
[Einführung in cx_Oracle] (Teil 7) Umgang mit Bindevariablen
[Einführung in cx_Oracle] Übersicht über cx_Oracle
Serie: Einführung in den Inhalt von cx_Oracle
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
Ausnahmebehandlung
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Einführung in MQTT (Einführung)
Einführung in Scrapy (1)
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Einführung in Tkinter 1: Einführung
[Cx_Oracle Primer] (Teil 3) Grundlagen zum Durchsuchen von Tabellen
Einführung in PyQt
Einführung in Scrapy (2)
Behandlung von Python-Ausnahmen
boto3 Ausnahmebehandlung
[Linux] Einführung in Linux
[Einführung in cx_Oracle] (15.) Erstellen einer Ergebnismenge in einem anderen Format als tapple
Einführung in Scrapy (4)
Einführung in discord.py (2)
Behandlung von Python-Ausnahmen
[Einführung in cx_Oracle] (Teil 11) Grundlagen der PL / SQL-Ausführung
[Einführung in cx_Oracle] (13.) Verbindung über Verbindungspool (Client-Seite)
Erste Schritte mit Web Scraping
Einführung in nichtparametrische Felder
Einführung in die Python-Sprache
Einführung in die TensorFlow-Bilderkennung
Einführung in OpenCV (Python) - (2)
Python, über die Ausnahmebehandlung
Einführung in PyQt4 Teil 1
Einführung in die Abhängigkeitsinjektion
Einführung in Private Chainer
Einführung in das maschinelle Lernen
Fizzbuzz mit Ausnahmebehandlung
[Einführung in cx_Oracle] (Teil 4) Abrufen und Scrollen der Ergebnismenge