[PYTHON] [Introduction à cx_Oracle] (12e) Gestion des exceptions DB

Table de sérialisation

Série: Introduction à cx_Oracle Contents

Environnement de vérification

--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.

Liste des exceptions

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.

Variables pouvant être gérées par la gestion des exceptions

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

[Introduction à cx_Oracle] (12e) Gestion des exceptions DB
[Introduction à cx_Oracle] (17e) Gestion du type de date
[Introduction à cx_Oracle] (5e) Gestion des données japonaises
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
[Introduction à l'application Udemy Python3 +] 65. Gestion des exceptions
[Introduction à cx_Oracle] (Partie 7) Gestion des variables de liaison
[Introduction à cx_Oracle] Présentation de cx_Oracle
Série: Introduction à cx_Oracle Contents
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
Gestion des exceptions
J'ai essayé de résumer la gestion des exceptions Python
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Introduction à Tkinter 1: Introduction
[Cx_Oracle Primer] (Partie 3) Bases de la navigation dans les tableaux
Introduction à PyQt
Introduction à Scrapy (2)
Gestion des exceptions Python
gestion des exceptions boto3
[Linux] Introduction à Linux
[Introduction à cx_Oracle] (15e) Création d'un jeu de résultats dans un format autre que tapple
Introduction à Scrapy (4)
Introduction à discord.py (2)
Gestion des exceptions Python
[Introduction à cx_Oracle] (Partie 11) Bases de l'exécution PL / SQL
[Introduction à cx_Oracle] (13e) Connexion utilisant le pool de connexions (côté client)
Premiers pas avec le Web Scraping
Introduction aux baies non paramétriques
Introduction au langage Python
Introduction à la reconnaissance d'image TensorFlow
Introduction à OpenCV (python) - (2)
Python, à propos de la gestion des exceptions
Introduction à PyQt4 Partie 1
Introduction à l'injection de dépendances
Introduction à Private Chainer
Introduction à l'apprentissage automatique
Fizzbuzz avec gestion des exceptions
[Introduction à cx_Oracle] (Partie 4) Récupération et défilement du jeu de résultats