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

SQL Oracle Discussion :

Select case avec then qui retourne une variable


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut Select case avec then qui retourne une variable
    Bonjour à tous,

    J'aurais voulu savoir comment faire ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select case
    when exists (select section.id from section where dur = '135') then section.id
    else '0'
    end as res
    from dual;
    Je cherche depuis un bon moment mais je ne trouve pas.

    D'avance merci de vos réponses,

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select nvl((select section.id from section where dur = '135'), '0')
    as res
    from dual;
    Attention a ce que ta requête sur section ne te ramène pas plusieurs lignes.

  3. #3
    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
    Citation Envoyé par dinette Voir le message
    Bonjour à tous,

    J'aurais voulu savoir comment faire ce qui suit :

    select case
    when exists (select section.id from section where dur = '135') then section.id
    else '0'
    end as res
    from dual;

    Je cherche depuis un bon moment mais je ne trouve pas.

    D'avance merci de vos réponses,
    Sinon si tu tiens a la structure CASE

    alors

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    with section as
    (
    select '12344' id , '123' dur from dual union
    select '89000' id, '456' dur from dual union
    select '45678' id, '890' dur from dual 
    )
    select case when dur='123' then id else '0' end 
    from section

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup à vous pour vos réponses rapides,

    Non le case n'était pas obligatoire, donc la première solution marche du tonnerre, merci.
    Juste une petite question : le resulat sera bien traitée en numerique ?



    Si je peux éxagerer en demandant le nom du fonction qui retourne le booleen vrai ou faux suivant une expression.

    D'avance merci,

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Avec un peu de recherches, j'ai trouvé cette fonction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT nvl2(
      (select distinct status from toto where name='sophie' and status = '150'), 
      'vrai','faux') AS res
    FROM dual;
    Par contre ma question est la réponse était elle considéré comme un booléen ou du texte ?

    D'avance merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    Citation Envoyé par dinette Voir le message
    Juste une petite question : le resulat sera bien traitée en numerique ?
    Si tu veux un résultat numérique, il est préférable d'écrire 0 plutôt que '0'.

    Citation Envoyé par dinette Voir le message
    Si je peux éxagerer en demandant le nom du fonction qui retourne le booleen vrai ou faux suivant une expression.
    A ma connaissance ça n'existe pas sous forme de fonction (mais tu peux le bricoler avec CASE WHEN ou DECODE). En effet, le type booléen n'existe pas sous Oracle (et pas non plus sur la plupart des SGBDR) ; la logique booléenne est une logique à deux états (vrai/faux), alors que les SGBDR utilisent la logique à trois états (vrai/faux/inconnu, représentés généralement par 1, 0 et NULL), définie par Lukasiewicz.

    Citation Envoyé par dinette Voir le message
    Avec un peu de recherches, j'ai trouvé cette fonction :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT nvl2(
      (select distinct status from toto where name='sophie' and status = '150'), 
      'vrai','faux') AS res
    FROM dual;
    Par contre ma question est la réponse était elle considéré comme un booléen ou du texte ?
    Comme du texte, puisque c'est entre apostrophes. Les booléens n'existent pas en SQL Oracle (d'autres dialectes font exception), pour la raison indiquée ci-dessus.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 91
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup !!



    J'ai pu bien avancer grâce à vous !!


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

Discussions similaires

  1. Oracle : Case dans Where qui retourne une liste
    Par stof dans le forum Oracle
    Réponses: 9
    Dernier message: 29/07/2011, 10h21
  2. Réponses: 0
    Dernier message: 24/06/2010, 15h29
  3. [PHP 5.0] Creer une fonction qui retourne une variable dans le script
    Par keaton7 dans le forum Langage
    Réponses: 8
    Dernier message: 10/02/2009, 14h09
  4. [Tableaux] Pb avec fonction qui retourne 2 variables
    Par cyberdevelopment dans le forum Langage
    Réponses: 6
    Dernier message: 12/07/2006, 14h19

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