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 :

SELECT multiple & NO_DATA8FOUND


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut SELECT multiple & NO_DATA8FOUND
    Bonjour,


    J'aimerais factoriser le code ci dessous :

    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
      BEGIN
          SELECT TIERS.VILLE INTO ville_dest FROM TIERS, OL WHERE TIERS.SECTEUR_TIERS = OL.CODE_SECTEUR AND TIERS.MNEMO_TIERS = OL.MNEMO_CLIENT_CDE AND TIERS.RAISON_1_TIERS = OL.RAISON_DEST_1 AND OL.CODE_ADR_DEST = TIERS.CODE_ADRESSE AND OL.NO_OL = var_c.NO_OL;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              ville_dest := NULL;  
            WHEN TOO_MANY_ROWS THEN 
              DBMS_OUTPUT.put_line('probleme dans select ... into : trop de lignes pour la ville') ; 
        END ;
     
        BEGIN
          SELECT TIERS.NO_TELEPHONE INTO no_telephone FROM TIERS, OL WHERE TIERS.SECTEUR_TIERS = OL.CODE_SECTEUR AND TIERS.MNEMO_TIERS = OL.MNEMO_CLIENT_CDE AND TIERS.RAISON_1_TIERS = OL.RAISON_DEST_1 AND OL.CODE_ADR_DEST = TIERS.CODE_ADRESSE AND OL.NO_OL = var_c.NO_OL;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              no_telephone := NULL;  
            WHEN TOO_MANY_ROWS THEN 
              DBMS_OUTPUT.put_line('probleme dans select ... into : trop de lignes pour le numero de telephone') ; 
        END ;
     
        BEGIN
          SELECT TIERS.NO_PORTABLE INTO no_portable FROM TIERS, OL WHERE TIERS.SECTEUR_TIERS = OL.CODE_SECTEUR AND TIERS.MNEMO_TIERS = OL.MNEMO_CLIENT_CDE AND TIERS.RAISON_1_TIERS = OL.RAISON_DEST_1 AND OL.CODE_ADR_DEST = TIERS.CODE_ADRESSE AND OL.NO_OL = var_c.NO_OL;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              no_portable := NULL;  
            WHEN TOO_MANY_ROWS THEN 
              DBMS_OUTPUT.put_line('probleme dans select ... into : trop de lignes pour le numero de portable') ; 
        END ;
    en faisant un SELECT sur tous les éléments concernés INTO toutes les variables concernées (rangées dans le même ordre)

    Mais comment gérer les exception de NO_DATA_FOUND pour chaque variable (indépendemment des autres) ???

    Merci d'avance

  2. #2
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    L'exception WHEN_NO_DATA_FOUND est liée à la clause where et non à la clause select, donc à la restriction que tu fais et non aux colonnes que tu ramènes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    BEGIN
          SELECT TIERS.VILLE,TIERS.NO_TELEPHONE INTO ville_dest,no_telephone FROM TIERS, OL WHERE TIERS.SECTEUR_TIERS = OL.CODE_SECTEUR AND TIERS.MNEMO_TIERS = OL.MNEMO_CLIENT_CDE AND TIERS.RAISON_1_TIERS = OL.RAISON_DEST_1 AND OL.CODE_ADR_DEST = TIERS.CODE_ADRESSE AND OL.NO_OL = var_c.NO_OL;
          EXCEPTION
            WHEN NO_DATA_FOUND THEN
              ville_dest := NULL;  
              no_telephone := null;
            WHEN TOO_MANY_ROWS THEN 
              DBMS_OUTPUT.put_line('probleme dans select ... into : trop de lignes pour la ville') ; 
        END ;
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    Ok merci beaucoup.

    Et pour faire un truc encore plus précis, est-ce qu'on peut faire la même chose avec le TOO_MANY_ROW ??
    Cela éviterai d'écrire la même chose pour des erreurs de variables différentes...

    Merci pour la rapidité de ta réponse précédente !

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    C'est le même principe : l'exception too_many_rows dépend du nombre de lignes ramenées (donc de la clause where) et non des colonnes affichées.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2008
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    Ah !!
    J'avais pas bien compris le fait que l'exception vient de la clause "WHERE" et non du "SELECT"...
    Je viens de comprendre et ça prends tout son sens...
    Mais alors quand je fais ma requete, qu'il retourne le couple ("Paris", null) car le numéro de téléphone n'est pas renseigné, est-ce que la requête passe dans l'excception NO_DATA_FOUND ou pas ?

    En toute logique NON, et le résultat sera bien :
    ville_dest = "Paris"
    no_tel = null

    C'est bien ça ??

    Merci d'éclairer mes lanternes (je commence à peine le pl/sql et j'essai de comprendre les mécanismes !)

  6. #6
    Membre expérimenté Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Points : 1 332
    Points
    1 332
    Par défaut
    Si il y a au moins un resultat trouvé le rsultat ne tombera pas dans l'exception.

    Sinon une doc est ici

    http://download.oracle.com/docs/cd/B...7_errs.htm#725

    asktom.oracle.com tahiti.oracle.com otn.oracle.com

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.


    phrase chinoise issue du Huainanzi

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2008
    Messages : 75
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par zz2f3 Voir le message
    Ah !!
    J'avais pas bien compris le fait que l'exception vient de la clause "WHERE" et non du "SELECT"...
    Je viens de comprendre et ça prends tout son sens...
    Mais alors quand je fais ma requete, qu'il retourne le couple ("Paris", null) car le numéro de téléphone n'est pas renseigné, est-ce que la requête passe dans l'excception NO_DATA_FOUND ou pas ?

    En toute logique NON, et le résultat sera bien :
    ville_dest = "Paris"
    no_tel = null

    C'est bien ça ??

    Merci d'éclairer mes lanternes (je commence à peine le pl/sql et j'essai de comprendre les mécanismes !)
    oui ta reponse est correcte.
    et si maintenant tu veux verifier la nullité d'une colonne retournée par ta requete, utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if v_col1 is null then
      ..
    end if;

Discussions similaires

  1. Select multiple
    Par lfournial dans le forum Struts 1
    Réponses: 20
    Dernier message: 24/02/2011, 12h14
  2. select multiple sur plusieurs tables
    Par syl2095 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/12/2004, 15h48
  3. [VB6] sélection multiple de colonne dans excel grâce à VB
    Par biquet dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/08/2004, 12h44
  4. <select multiple ...>
    Par ayobo dans le forum ASP
    Réponses: 2
    Dernier message: 06/07/2004, 08h49
  5. [C#]Sauvegarde d'une selection multiple d'une listbox?
    Par onouiri dans le forum ASP.NET
    Réponses: 7
    Dernier message: 29/04/2004, 17h16

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