Série: Introduction à cx_Oracle Contents
--Utilisation d'Oracle Cloud
cx_Oracle.DatabaseError L'exception cx_Oracle.DatabaseError est une exception au problème survenu lors de l'utilisation de cx_Oracle de base. cx_Oracle.DatabaseError lui-même est une sous-classe de cx_Oracle.Error, qui est une sous-classe de l'erreur standard Python. Il existe de nombreuses autres exceptions cx_Oracle, mais elles sont définies comme des sous-classes de l'une de ces exceptions. Utilisez cx_Oracle.DatabaseError si vous souhaitez gérer toutes les exceptions cx_Oracle, quels que soient les principes de base ou le contenu.
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
Dans sample12a.py, un connecteur TNS qui n'existe pas dans le contenu de la variable DESTINATION sur la 4ème ligne est spécifié. Par conséquent, si vous l'exécutez, une erreur de connexion se produira toujours. Si vous n'effectuez aucune gestion d'erreur spéciale dans le codage comme cet exemple, vous obtiendrez une exception de cx_Oracle.DatabaseError. Le contenu du message d'exception est le numéro d'erreur Oracle Database (ORA-xxxxx, exemple d'exécution "ORA-12154") correspondant au contenu d'erreur et le message d'erreur correspondant au numéro d'erreur (exemple d'exécution "TNS: n'a pas pu résoudre la connexion"). identifiant spécifié "). Le message d'erreur est en anglais car la variable d'environnement NLS_LANG n'a pas été spécifiée lors de l'exécution de cet exemple. Si vous souhaitez recevoir des messages d'erreur en japonais, veuillez définir NLS_LANG.
Outre cx_Oracle.Error et cx_Oracle.DatabaseError, des exceptions en fonction d'événements individuels et des exceptions spécifiées par l'API DB sont définies.
Nom de l'exception | La description |
---|---|
cx_Oracle.InterfaceError | cx_Une exception au problème lors de l'utilisation de l'interface Oracle. À titre d'exemple, cx_Cela se produit lorsque l'utilisation de l'API d'Oralce est incorrecte. |
cx_Oracle.DataError | Se produit en cas de problème avec le contenu des données, tel qu'une division par 0 ou un débordement de chiffres. |
cx_Oracle.OperationalError | ORA-Erreurs internes DB comme 600 et ORA-Se produit en cas d'erreur de communication telle que 3135. |
cx_Oracle.IntegrityError | Se produit lorsqu'il existe des problèmes d'intégrité des données tels que des violations de contrainte d'intégrité référentielle. |
cx_Oracle.InternalError | Se produit en cas d'erreur interne. ORA-Les erreurs internes prédéfinies telles que 600 sont cx_Oracle.Puisqu'il s'agira d'une OperationalError, cela correspond à un problème interne qui n'entraîne pas ces codes d'erreur. Un exemple est lorsque vous accédez à un curseur non valide. |
cx_Oracle.ProgrammingError | Exceptions aux problèmes de programmation. Un exemple est lorsqu'il y a un problème avec l'instruction SQL que vous émettez. |
cx_Oracle.NotSupportedError | Cx inexistant_Se produit lorsque vous appelez une méthode Oracle. |
cx_Oracle.Warning | Bien qu'il soit défini car il existe dans l'API DB, cx_Il est pratiquement inutilisé dans Oracle. |
Dans la gestion des exceptions, il est possible de se référer aux informations de variable en lecture seule suivantes. Ceux-ci sont collectivement inclus dans l'argument taple.
Nom de variable | La description |
---|---|
_Error.code | Numéro d'erreur de la base de données Oracle |
_Error.offset | Décalage d'erreur |
_Error.message | Message d'erreur |
_Error.context | Informations de contexte d'erreur |
_Error.isrecoverable | Type booléen s'il s'agit d'une erreur récupérable. Pour utiliser cette variable, Oracle Server/12 pour les deux clients.Doit être 1 ou version ultérieure. False est stocké chaque fois que la condition de version n'est pas remplie |
À titre d'exemple, les variables ci-dessus sont utilisées en dehors de l'exemple comme indiqué ci-dessous. Dans cet exemple, la fonction d'exception définie par l'utilisateur de PL / SQL est utilisée pour générer intentionnellement l'ORA-600 que tout le monde aime (???).
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("Une erreur est survenue. Veuillez contacter l'administrateur avec le code d'erreur et le message.")
print("Code d'erreur: ", error.code)
print("Message d'erreur: ", error.message)
finally:
cursor.close()
connection.close()
$ python sample12b.py
Une erreur est survenue. Veuillez contacter l'administrateur avec le code d'erreur et le message.
Code d'erreur: 600
Message d'erreur: ORA-00600:Code d'erreur interne,argument: [600], [], [], [], [], [], [], [], [], [], [], []
ORA-06512:Ligne 6
Recommended Posts