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 :

Exception dans procédure


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 48
    Par défaut Exception dans procédure
    Bonjour,

    Dans ma procédure, je commence par récupérer le dernier identifiant de ma table mais cette dernière est vide.
    Le curseur ne ramène donc aucune ligne. Je veux gérer ce cas par une exception, mais rien à faire cela ne marche pas !

    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
    CURSOR cur_max_code is
        select max(CODE) from TOTO;
        nCode number(10);
    begin
    nCode_Iti := 0;
        Begin
          Open cur_max_code;
          Fetch cur_max_code Into nCode ;
        Exception
         when NO_DATA_FOUND then
            nCode := 0;
        end;
    EXCEPTION
       When OTHERS then
             F_TRACE('ERR : Erreur ','T'); 
    end;
    Merci de votre aide.

  2. #2
    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
    1) Select Max renvoye toujours au moins une occurence
    2) Fetch explicite ne génére jamais NO_DATA_FOUND
    3) Pour tester si le Fetch a raméné une occurence testez cursor%FOUND/NOTFOUND

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2010
    Messages
    211
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 211
    Par défaut
    Ou bien tester le count(*) sur ta table TOTO et là tu traites les cas :

    Si le count(*) > 0 alors tu passes par ton curseur
    Sinon, tu gères cette exception.

  4. #4
    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
    Citation Envoyé par AbouZaid Voir le message
    Ou bien tester le count(*) sur ta table TOTO et là tu traites les cas :

    Si le count(*) > 0 alors tu passes par ton curseur
    Sinon, tu gères cette exception.
    Ou mieux non.

  5. #5
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Citation Envoyé par mnitu Voir le message
    3) Pour tester si le Fetch a raméné une occurence testez cursor%FOUND/NOTFOUND
    Si tu veux vraiment récupérer le max et affecter 0 si la table est vide, il faut juste remarquer que quand c'est vide, ça retourne null...

    ... et à moins qu'il y a des cas extrêmes où NULL est vraiment la valeur du code, tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COALESCE(max(CODE), 0) FROM TOTO;
    Allez, en bonus si ça correspond vraiment à ton code réel : tu n'as pas besoin de curseur, tu peux directement mettre le résultat dans ta variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    BEGIN 
    SELECT COALESCE(max(CODE), 0) INTO nCode FROM TOTO;
    END

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 48
    Par défaut [Résolu]
    Merci à tous !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [10g] Gestion d'exception dans une procédure
    Par donny dans le forum PL/SQL
    Réponses: 4
    Dernier message: 09/08/2013, 11h45
  2. Gestion des exceptions dans une procédure stockée
    Par merlubreizh dans le forum DB2
    Réponses: 13
    Dernier message: 02/10/2012, 18h05
  3. Gestion d'exception dans une procédure stockée
    Par ramone dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2010, 18h58
  4. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52
  5. Réponses: 2
    Dernier message: 28/08/2003, 00h00

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