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

Oracle Discussion :

[ORA-01403] Pas de données trouvées ; et alors ?


Sujet :

Oracle

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut [ORA-01403] Pas de données trouvées ; et alors ?
    Bonjour,

    au milieu d'une procédure PL/SQL, j'obtiens l'erreur suivante :

    ERREUR Ó la ligne 1 :
    ORA-01403: aucune donnÚe trouvÚe
    ORA-06512: Ó "ADMMCKPH.M4SPH_DADSU_S30_G01_00", ligne 138
    ORA-06512: Ó ligne 1

    L'erreur en question provient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT std_n_countryfra 
    INTO s30_g01_00_013
    FROM std_country A, std_hr_nat B
    WHERE A.std_id_country=B.std_id_country 
    AND B.std_id_hr=id_hr;
     
     
    IF s30_g01_00_013 IS NULL THEN
    s30_g01_00_013:=s30_g01_00_008_014;
    END IF;

    J'ai donc prévu le cas pour "aucune donnée trouvée" ; comment faire pour qu'il ignore cette erreur, par exemple ?

    Merci

  2. #2
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    Bonjour,

    Tu as prévu de gérer le cas avec ton test, mais ce n'est pas comme cela que les choses se gèrent en PL/SQL. Il faut en fait gérer l'exception NO_DATA_FOUND

    Ton code doit ressembler à ceci :

    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
    DECLARE
      ....
    BEGIN
      SELECT std_n_countryfra INTO s30_g01_00_013 FROM std_country A, 
      std_hr_nat B WHERE A.std_id_country=B.std_id_country 
      AND .std_id_hr=id_hr; 
     
      -- continue ton traitement normalement     
     
    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        s30_g01_00_013:=s30_g01_00_008_014 ; 
      WHEN OTHERS THEN
        -- au cas où tu veux traiter d'autres exceptions
    END ;
    En fait, je te conseille STP d'ouvrir un livre sur le PL/SQL au chapitre concernant la gestion des exceptions.

  3. #3
    Membre émérite Avatar de nuke_y
    Profil pro
    Indépendant en analyse de données
    Inscrit en
    Mai 2004
    Messages
    2 076
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant en analyse de données

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 076
    Points : 2 370
    Points
    2 370
    Par défaut
    Il y a ptet une erreur de principe dans ce que tu as fait.

    Sinon je dirais que tu peux tester avant (If count(*)=1, tu refais la requête en attribuant la valeur à ta variable) ou tu peux utiliser les fonctions NVL ou DECODE.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Il me semble que dans ce cas, si l'exception est levée, la procédure s'arrête...
    Or, j'ai encore des traitements à réaliser après l'affectation...

    Me trompe je ?

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    Merci pour ta réponse ; en fait, je me demandais si il y avait pas une solution plus "belle"

  6. #6
    Expert Oracle confirmé

    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Mars 2003
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2003
    Messages : 448
    Points : 926
    Points
    926
    Par défaut
    La procédure ne s'arrête pas forcément. C'est à toi de gérer la situation. En fait, les exceptions se gèrent dans des blocs PL/SQL, et rien ne t'interdit (bien au contraire) de les encapsuler pour poursuivre ton traitement.

    Ton code devient :

    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
    DECLARE 
      .... 
    BEGIN 
      -- Bloc PL/SQL principal
     
      BEGIN
        SELECT std_n_countryfra INTO s30_g01_00_013 FROM std_country A, 
        std_hr_nat B WHERE A.std_id_country=B.std_id_country 
        AND .std_id_hr=id_hr; 
     
        -- traitement "normal", le select a remonté une ligne de données
     
      EXCEPTION 
        WHEN NO_DATA_FOUND THEN 
          -- le select n'a rien ramené
          s30_g01_00_013:=s30_g01_00_008_014 ; 
      END ;
     
      -- ici tu reviens dans le bloc principal et tu continues ton traitement
     
    END ;

  7. #7
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    194
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 194
    Points : 102
    Points
    102
    Par défaut
    ok...

    Je savais pas pour les exceptions "internes" ; je ne les utilisais qu'à la fin

    Merci

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

Discussions similaires

  1. Comment Eviter ORA-01403(aucune donnée trouvée)
    Par riadhhwajdii dans le forum PL/SQL
    Réponses: 7
    Dernier message: 28/01/2011, 12h06
  2. ORA-01403: Aucune donnée trouvée
    Par MaRTy59 dans le forum PL/SQL
    Réponses: 9
    Dernier message: 10/08/2010, 11h26
  3. ORA-1652 : pas d'affichage des données ?
    Par rimas2009 dans le forum Sql Developer
    Réponses: 1
    Dernier message: 22/06/2010, 17h18
  4. Réponses: 2
    Dernier message: 13/07/2005, 13h53
  5. pas d'enregistrements trouvés
    Par mpat dans le forum ASP
    Réponses: 6
    Dernier message: 10/02/2005, 09h00

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