IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

[10g] Error handling dans package


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [10g] Error handling dans package
    Salut,

    Je travaille sur une procédure d'injection de données en provenance d'un service. La cible est un schéma qui compte 17 tables.

    Étant donné qu'il y a pas mal d'étape, je produis des exceptions lorsque quelque chose s'est mal passé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    ...
    IS
        vExeptionTreatmentNotFound EXCEPTION;
        vExeptionTreatmentDateNotSet EXCEPTION;
    BEGIN
    ...
    	IF pTREATMENT_ID is null THEN
    		RAISE vExeptionTreatmentNotFound;
    	END IF;
    	IF pTREATMENT_DATE is null THEN
    		RAISE vExeptionTreatmentDateNotSet;
    	END IF;
    ...
    EXCEPTION
        WHEN vExeptionTreatmentNotFound THEN
            raise_application_error(-20001, 'Treatment not found');
        WHEN vExeptionTreatmentDateNotSet THEN
            raise_application_error(-20010, 'Treatment date not set');
    END;
    Est il possible de connaitre le n° de ligne dans le package qui a déclenché l'exception pour éviter d'avoir un retour type error in line 1 ?

    D'avance merci

    Laurent

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Pourquoi tu ne le gères pas par variable ?

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    En fait c'est pour faciliter le travail de la maintenance, je traite déjà par variable puisque je déclare des exceptions.
    Pour le moment j'ai décidé d'extraire cette procédure dans un package dédié.

    ++

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je ne pense pas que ce soit possible car tu peux encapsuler plusieurs exceptions.
    Ah.. peut être avec la stack error

    RAISE_APPLICATION_ERROR(<error_number>, <error_message>, <TRUE | FALSE>);

    error_number -20000 to -20999
    error_message VARCHAR2(2048)
    TRUE add to error stack
    FALSE replace error stack (the default)
    Et un petit tour sur google avec error stack, j'ai trouvé ceci :
    tracking exceptions in oracle 10g

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    En fait le problème est dans la manière de coder. Si à la place de tous ça vous écrivez tout simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    BEGIN
    ...
     
    	IF pTREATMENT_ID IS NULL THEN
    		raise_application_error(-20001, 'Treatment not found');
    	END IF;
    	IF pTREATMENT_DATE IS NULL THEN
    		raise_application_error(-20010, 'Treatment date not set');
    	END IF;
    ...
    -- Exception -- Il n'y pas d'exception à gerer
    END;
    vous aurez votre numéro de ligne en bonus.

  6. #6
    CUCARACHA
    Invité(e)
    Par défaut
    OUi je l'ai constaté c'est parfait merci.

Discussions similaires

  1. [10g]ORA-01008 dans SQL*Loader
    Par isa06 dans le forum SQL
    Réponses: 3
    Dernier message: 11/05/2006, 17h17
  2. [Delphi 7+Crystal Reports XI] - Error 515 dans un rapport
    Par david_chardonnet dans le forum SDK
    Réponses: 1
    Dernier message: 03/04/2006, 10h42
  3. [ERROR.PHP]Dans quel répertoire?
    Par Jean_Benoit dans le forum Apache
    Réponses: 5
    Dernier message: 28/03/2006, 09h48
  4. error-page dans Tomcat
    Par orest dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 31/01/2006, 11h44
  5. erreurs fatal error C1010 dans visual c++ 6.0
    Par screeminelle dans le forum MFC
    Réponses: 2
    Dernier message: 12/10/2005, 13h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo