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 :

[SQL Oracle 8 / 9i] Afficher autre chose que NULL ??...


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut [SQL Oracle 8 / 9i] Afficher autre chose que NULL ??...
    Bonjour,

    Je cherche depuis ce matin une solution pour qu'Oracle ne m'affiche pas un résultat NULL lorsque le résultat de mon select avec jointure est vide.

    Sachant que ma jointure est de ce style ci :

    where a = (select ...)

    et donc je ne peux pas mettre un (+) à côté de la parenthèse du select.

    Merci d'avance.

  2. #2
    Nouveau Candidat au Club
    Inscrit en
    Mai 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Essaye where a = (select nvl(TaColonne,LaValeurQueTuVeux) ...)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Mon problème n'est pas le select dans la clause where mais plutot le select principal.

    J'aimerais que je puisses retourner une valeur bidon genre 999 si mon select ne me renvoi pas de résultat.

    Je sais que si je fais une fonction, c'est super simple à réaliser mais j'aurais voulu faire cela avec un simple sql.

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    ça doit être possible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SCOTT@LSC01> select * from dept where deptno (+) = (select 50 from dual);
    select * from dept where deptno (+) = (select 50 from dual)
                                                              *
    ERROR at line 1:
    ORA-01799: a column may not be outer-joined to a subquery
     
     
    SCOTT@LSC01> select * from dept,(select 50 x from dual) where deptno(+)=x;
        DEPTNO DNAME          LOC                    X
    ---------- -------------- ------------- ----------
                                                    50

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    ou dans l'autre sens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SCOTT@LSC01> select * from dept,(select 50 x from dual) where deptno=x(+);
        DEPTNO DNAME          LOC                    X
    ---------- -------------- ------------- ----------
            30 SALES          CHICAGO
            40 OPERATIONS     BOSTON
            20 RESEARCH       DALLAS
            10 ACCOUNTING     NEW YORK

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Merci Laurent mais cela semble ne pas fonctionner dans mon cas.

    J'ai essayé d'isoler le problème et apparemment, cela fonctionne donc j'ai bien un 50 SI il n'y a qu'une condition dans la clause where.

    Si je mets deux conditions, cela ne fonctionne plus.


  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    quelle est ta requête?

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    il suffit de mettre le SELECT dans le FROM est là la jointure externe sera possible non ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    on peut clôturer ce thread car à mon avis, ce que je veux faire ne sera jamais possible.
    Je peux vous montrer la requête du développeur qui me demande cela mais faut la comprendre

    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
     
    SELECT ID_PLAN_PL
          ,ID_DROIT_PL 
          ,DATE_ACCEPT_PL
          ,ID_SEQ_PLAN_PLS 
          ,SEQ_PLAN_PLS
          ,DATE_PAIEM_PLS
          ,MONT_SEQ_PLS
          ,C.y
    FROM DBARP.CI_PLAN_RP 
             ,DBARP.CI_PLANSEQ_RP A
             ,(select '50' y from dual) C
             ,(select MIN(B.SEQ_PLAN_PLS) x
                                 From  DBARP.CI_PLANSEQ_RP B
                                 WHERE B.ID_PLAN_PL_PLS = (SELECT  ID_PLAN_DA FROM DBARP.CI_DOSS_ADM_RP WHERE  ID_DROIT_DA =  1000555005)
                                  AND B.DATE_PAIEM_PLS IS NULL )
    WHERE DATE_ACCEPT_PL IS NOT NULL
       AND ID_DROIT_PL = 1000555005
       AND A.ID_PLAN_PL_PLS = ID_PLAN_PL
       AND A.SEQ_PLAN_PLS =y(+)
    Désolé pour la mise en page.
    En gros, il veut afficher les colonnes du premier select pour la row où ID_DROIT_PL = 1000555005 et A.SEQ_PLAN_PLS est égale à la plus petite valeur B.SEQ_PLAN_PLS où DATE_PAIEM_PLS est null.

    Le problème est que s'il n'existe pas de
    de DATE_PAIEM_PLS null alors il n'y a pas de MIN(B.SEQ_PLAN_PLS) et donc la condition where A.SEQ_PLAN_PLS = MIN(B.SEQ_PLAN_PLS) ne peut être vérifiée et donc je n'ai pas de résultats.

    Son problème est qu'il voudrait que dans ce cas là, une valeur bidon soit quand même affichée ce qui lui permet de savoir qu'il n'y a pas de valeur NULL pour la DATE_PAIEM_PLS.

    Je sais qu'il est très chiant mais il ne peut pas passer par une fonction et il aimerait le faire en une requête.

    Je sais pas si j'ai été clair.

  10. #10
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Je sais pas si j'ai été clair.
    Vous le seriez plus si vous utilisiez les balises CODE !

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par deus666
    Bonjour,

    Je cherche depuis ce matin une solution pour qu'Oracle ne m'affiche pas un résultat NULL lorsque le résultat de mon select avec jointure est vide.

    Sachant que ma jointure est de ce style ci :

    where a = (select ...)

    et donc je ne peux pas mettre un (+) à côté de la parenthèse du select.

    Merci d'avance.

    Ben, suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT machin
    FROM table
    WHERE a = nvl((select...),a)
    Non?

  12. #12
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Points : 277
    Points
    277
    Par défaut
    Et si tu faisais une deuxième requete en UNION qui te rendrait ta valeur par défaut lorsque la première requete ne te rend aucune ligne?

    Ca te permettrait d'avoir ce que tu avais déjà + une valeur par défaut pour chacune des cas qui ne rendaient rien.

    La difficulté est d'établir la deuxième requete.
    Dyvim

Discussions similaires

  1. Autre chose que les SSII
    Par Invité dans le forum Emploi
    Réponses: 18
    Dernier message: 25/08/2006, 12h36
  2. ON DELETE SET autre chose que null
    Par minirom dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/07/2006, 15h32
  3. check box pour afficher autre chose
    Par vincent1412 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/02/2006, 17h47
  4. Arrive plus a installer autre chose que debian
    Par kosmic dans le forum Debian
    Réponses: 10
    Dernier message: 12/12/2005, 11h50
  5. [langage] connaissez-vous autre chose que -d
    Par Sébastien dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2002, 20h13

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