Serie: Einführung in den Inhalt von cx_Oracle
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.
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. |
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