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] Gestion d'erreur


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] Gestion d'erreur
    Salut,

    Existe-t-il une solution pour ne pas bloquer l’exécution d'une fonction lorsqu'une erreur no data se produit ?

    D'avance merci

    Laurent

  2. #2

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    Bonsoir,

    J'utilise les exception mais je cherche un truc équivalent à Résume next de VB car lorsqu'on est déjà dans le error handling, je ne suis pas certain que l'on puisse remonter dans le flux d'execution de la procédure.

    Je vais relire le tuto plus lentement mais de prime abord, il ne résout pas mon problème.

    Merci

    Laurent

  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 Laurent Jordi Voir le message
    Salut,

    Existe-t-il une solution pour ne pas bloquer l’exécution d'une fonction lorsqu'une erreur no data se produit ?

    D'avance merci

    Laurent
    Salut,

    Ce n'est pas claire ce que tu cherche. Peut être que tu peux fournir un exemple.

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut
    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
    21
    22
    23
    24
    25
    26
    27
     
        */
        SELECT 
            pT.ID
        INTO
            vPrevTreatmentId
        FROM
            FHR_TREATMENT pT
        WHERE
            pT.TREATMENT_DATE = (
                SELECT 
                    MAX(spT.TREATMENT_DATE)
                FROM
                    FHR_TREATMENT spT
                WHERE
                    spT.TREATMENT_DATE<pTREATMENT_DATE
            );
        IF vPrevTreatmentId is null THEN
            vPrevInst_InstValueOverId := null;
            vPrevInst_CompOverId := null;
        ELSE
            vPrevInst_InstValueOverId := PAK_FHR.Instr_ValueOverId_Get(vPrevTreatmentId,vInstrumentId);
            vPrevInst_CompOverId := PAK_FHR.Instr_CompOverId_Get(vPrevTreatmentId,vInstrumentId);
            vPrevComp_CompValueOverId := PAK_FHR.Comp_ValueOverId_Get(vPrevTreatmentId,vCompartimentId);
            vPrevComp_UmbOverId := PAK_FHR.Comp_UMBOverId_Get(vPrevTreatmentId,vCompartimentId);
            vPrevUmb_UmbValueOverId := PAK_FHR.Comp_ValueOverId_Get(vPrevTreatmentId,vUmbrellaId);
        END IF;
    L'erreur se produit dans le SELECT pT.ID INTO vPrevTreatmentId

    J'ai besoin qu'en cas d'erreur, vPrevTreatmentId := null et que l'application continue.

    La seule solution à laquelle je pense est d'encapsuler le select into dans une fonction qui aurait sa propre gestion d'erreur. Ainsi je sais que j'aurais toujours un comportement conforme à les attentes.

    S'il y a une solution "inline" je préfère car les personnes qui seront chargées de la maintenance n'ont pas un super niveau en Oracle

    ++

    Laurent

  6. #6
    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
    La solution "inline" consiste à mettre le Select dans son propre bloc PL/SQL
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
        Begin
          SELECT 
                  pT.ID
              INTO
                  vPrevTreatmentId
              FROM
                  FHR_TREATMENT pT
              WHERE
                  pT.TREATMENT_DATE = (
                      SELECT 
                          MAX(spT.TREATMENT_DATE)
                      FROM
                          FHR_TREATMENT spT
                      WHERE
                          spT.TREATMENT_DATE<pTREATMENT_DATE
                  );
        Exception
          When NO_DATA_FOUND Then
            vPrevTreatmentId := Null; -- ça va! Le traitement peut continuer
        End;          
        IF vPrevTreatmentId IS NULL THEN
            vPrevInst_InstValueOverId := NULL;
            vPrevInst_CompOverId := NULL;
        ELSE
            vPrevInst_InstValueOverId := PAK_FHR.Instr_ValueOverId_Get(vPrevTreatmentId,vInstrumentId);
            vPrevInst_CompOverId := PAK_FHR.Instr_CompOverId_Get(vPrevTreatmentId,vInstrumentId);
            vPrevComp_CompValueOverId := PAK_FHR.Comp_ValueOverId_Get(vPrevTreatmentId,vCompartimentId);
            vPrevComp_UmbOverId := PAK_FHR.Comp_UMBOverId_Get(vPrevTreatmentId,vCompartimentId);
            vPrevUmb_UmbValueOverId := PAK_FHR.Comp_ValueOverId_Get(vPrevTreatmentId,vUmbrellaId);
        END IF;

  7. #7
    CUCARACHA
    Invité(e)
    Par défaut
    Ok

    Merci

    ++

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    Bonjour,

    encadre simplement ton select dans un bloc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    code avant
    BEGIN
      le select
    EXCEPTION
     gestion erreur
    END;
     
    suite du code
    Edit: grillé

Discussions similaires

  1. gestion d'erreur et de transactions....
    Par Dge dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/02/2006, 22h20
  2. [Struts-Validator] Gestion d'erreurs
    Par sylvain_neus dans le forum Struts 1
    Réponses: 14
    Dernier message: 09/04/2004, 15h15
  3. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  4. [LG]tests pour la gestion d'erreur
    Par le 27 dans le forum Langage
    Réponses: 3
    Dernier message: 22/12/2003, 20h44
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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