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

Langage SQL Discussion :

[Oracle] SELECT et une condition IF => possible ?


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut [Oracle] SELECT et une condition IF => possible ?
    1ere table : OV
    NumOV|Numlig|numProjet|produit|dateLiv|...

    2nd table : projet
    Numprojet|LivO/N|dateprojet|...

    Je veux toutes les lignes d'OV lié à un projet dans la table Projet et pour lesquelles la date de livraison > à la date du jour de ma requête. si date de livraison > date du jour alors MAJ livO/N à 'NON'

    SELECT dateLiv, numprojet
    FROM OV v , projet p
    WHERE v.numprojet = p.numprojet
    IF dateliv > [datedujour]
    THEN UPDATE projet
    SET LivO/N = 'NON'

    ça ressemble plus à un mixe de langages
    ********************

    Sinon je pensais à cela !

    UPDATE projet
    set LivO/N = 'NON'
    where numprojet = (SELECT numprojet
    FROM OV v , projet p
    WHERE numprojet.v = numprojet.p
    AND dateliv > [datedujour])

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Et pourquoi pas avec la structure du case?!

    http://sqlpro.developpez.com/cours/sqlaz/select/#L7.1

  3. #3
    Membre habitué
    Inscrit en
    Août 2004
    Messages
    176
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 176
    Points : 126
    Points
    126
    Par défaut
    tout a fait soit utiliser case,
    ou bien utiliser DECODE (sous oracle) c'est un peu la meme chose

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par jejam
    tout a fait soit utiliser case,
    ou bien utiliser DECODE (sous oracle) c'est un peu la meme chose
    Donc en fait mon code deviendrait(si j'ai bien tout compris le DECODE):
    ------------------------------------------------------------------
    SELECT numprojet,decode(LivO/N,'NON',Datelive > datedujour,'OUI')
    FROM OV v, Projet P
    WHERE v.numprojet = p.numprojet
    AND datelive > datedujour
    ------------------------------------------------------------------

    Dans ce cas précis, je mets bien à jour mon champs LivO/N ????? sans passer par un UPDATE ???? étrange...

  5. #5
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Eu....en fait je crois qu'il y a un soucis la..je réfléchis ..ET ta date du jour tu l'obtiendras avec sysdate.

    @+

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    je me suis trompé sur le DECODE:
    DECODE(champs,condition,expression 1 si condition vérifiée,sinon expression 2).

    Ce qui donne:

    ------------------------------------------------------------------
    SELECT numprojet,decode(LivO/N,Datelive > datedujour,'NON','OUI')
    FROM OV v, Projet P
    WHERE v.numprojet = p.numprojet
    AND datelive > datedujour
    ------------------------------------------------------------------

  7. #7
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Correct! et si tu veux donc comme je disais ( vu qu'apparement tu es sous Oracle..) la date du jour a savoir pour aujourdui le 23/08/06...il faut que tu utilises la fonction SYSDATE

  8. #8
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Citation Envoyé par philuciole
    Dans ce cas précis, je mets bien à jour mon champs LivO/N ????? sans passer par un UPDATE ???? étrange...
    Non, avec un SELECT, on ne met rien à jour

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par trinityDev
    Correct! et si tu veux donc comme je disais ( vu qu'apparement tu es sous Oracle..) la date du jour a savoir pour aujourdui le 23/08/06...il faut que tu utilises la fonction SYSDATE
    Merci pour SYSDATE ( je connaissais )...j'ai quand même l'étrange impression que ce code n'est pas correct p/r à ma demande !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Xo
    Non, avec un SELECT, on ne met rien à jour
    VOILAAAA...c'est bien ce que je pensais !
    Mais maintenant je ne sais plus quoi penser avec mon DECODE, et mon UPDATE de départ était meilleur non ?

  11. #11
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Citation Envoyé par philuciole
    Sinon je pensais à cela !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE projet
    set LivO/N = 'NON'
    where numprojet = (SELECT numprojet
                               FROM OV v , projet p
                               WHERE numprojet.v = numprojet.p
                               AND dateliv > [datedujour])
    Vi en effet...teste le..

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par trinityDev
    Vi en effet...teste le..
    C'est ici que ça coince...je n'ai pas le matériel pour, je travaille pour l'instant sur un document papier, et je griffonne le code sans pvr le tester. Donc en résumé il faut que je résonne dans l'absolu.
    Dans l'absolu mon UPDATE est bien meilleur que mon DECODE ! non ?

  13. #13
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Si ton objectif est donc de mettre à jour le champ LivO/N à non lorsqu'une ligne a une dateliv>datedujour ( a travers sa clé: le numéro) OUI


    UPDATE est pour mettre à jour
    DECODE est une fonction qui te renvoie oui ou non dans ton cas, mais ne met pas à jour..si tu utilises decode, tu dois mettre ensuite chaque ligne à jour qui sont retournées par ton decode

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par trinityDev
    Si ton objectif est donc de mettre à jour le champ LivO/N à non lorsqu'une ligne a une dateliv>datedujour ( a travers sa clé: le numéro) OUI


    UPDATE est pour mettre à jour
    DECODE est une fonction qui te renvoie oui ou non dans ton cas, mais ne met pas à jour..si tu utilises decode, tu dois mettre ensuite chaque ligne à jour qui sont retournées par ton decode
    Justement je ne vois pas comment mixer l'UPDATE et le DECODE...et je sens l'usine à gaz !

  15. #15
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Après une recherche, a priori cela donne ça dans ton cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Update projet
    set LivO/N = decode(LivO/N,Datelive > datedujour,'NON','OUI')
    where dateliv > [datedujour]

  16. #16
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Points : 43
    Points
    43
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE ov
    SET LivO/N = 'NON'
    WHERE dateliv > sysdate
    AND numprojet IN (SELECT numprojet FROM projet p)

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Vincent_D
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    UPDATE ov
    SET LivO/N = 'NON'
    WHERE dateliv > sysdate
    AND numprojet IN (SELECT numprojet FROM projet p)
    ?????
    Tu mets à jour le champs LivO/N (qui fait parti de la table projet) alors que ton update porte sur la table OV.
    ?????

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par trinityDev
    Après une recherche, a priori cela donne ça dans ton cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Update projet
    set LivO/N = decode(LivO/N,Datelive > datedujour,'NON','OUI')
    where dateliv > [datedujour]
    dateliv est un champ de la table OV...aucune référence à cette table dans ton code.
    Il ne faut pas oublier l'intitulé de base qui comporte deux base , une jointure via numprojet.

  19. #19
    Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 40
    Points : 43
    Points
    43
    Par défaut
    J'ai répondu trop vite. Je propose alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE projet
       SET LivO/N = 'NON'
     WHERE numprojet IN (
         SELECT numprojet FROM ov
          WHERE dateliv > sysdate)

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Vincent_D
    J'ai répondu trop vite. Je propose alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE projet
       SET LivO/N = 'NON'
     WHERE numprojet IN (
         SELECT numprojet FROM ov
          WHERE dateliv > sysdate)
    Ouiiii, c'est bcp mieux et 'plus mieux' que mon code ! Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL-5.5] Select Where une condition unique
    Par Floyus dans le forum Requêtes
    Réponses: 2
    Dernier message: 03/05/2013, 09h28
  2. Requête avec une condition, est-ce possible ?
    Par le_chomeur dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/07/2010, 16h10
  3. Réponses: 4
    Dernier message: 02/11/2009, 12h28
  4. select suivant une condition?
    Par cortex024 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/06/2007, 19h03
  5. emploi d'un sub select dans une procédure - Oracle 8i -
    Par mike devimo dans le forum Oracle
    Réponses: 2
    Dernier message: 29/03/2006, 17h18

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