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

Requêtes MySQL Discussion :

COALESCE équivalent au NVL sur oracle ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Par défaut COALESCE équivalent au NVL sur oracle ?
    Bonjour tout le monde !

    Voilà, j'ai un petit problème avec une requête MySQL dans DELPHI.

    Voici un exemple de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COALESCE(CodeReference, -1) CodeReference
      FROM REFERENCE
    Lorsque j'exécute ma requête dans Toad for MySQL, elle fonctionne correctement et me ramène le CodeReference lorsqu'il est renseigné, et si il n'est pas renseigné, il me renvoit -1.

    J'ai mis cette requête dans DELPHI (j'utilise le composant ADOQuery) et lorsque j'effectue le queRequete.FieldByName('CodeReference').AsInteger, il me retourne 1.

    J'ai essayé de mettre -9 au lieu de -1 et il me retourne 9, soit sa valeur absolue.

    Savez-vous pourquoi ? Est-ce que COALESCE correspond bien à la fonction NVL d'oracle ?

    Par contre, lorsque ma valeur en base est négatif. J'obtiens bien -1 avec mon FieldByName. Je pense que c'est le COALESCE qui merde.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    C'est peut-être parce que le champ CodeReference a été créé avec l'option UNSIGNED, qui signifie que le nombre est nécessairement positif. Mais ça me surprendrait, vu que la requête fonctionne correctement dans Toad...

    Pour le vérifier, il faut faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE la_table;
    et regarder si le champ en question a bien cette option.

    Sinon, ça ne vient pas de COALESCE (qui renvoie bien la valeur précisée en deuxième paramètre si le premier est NULL) et le problème se situe au niveau de l'interface avec Delphi et du composant ADOQuery...

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre éclairé

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Par défaut
    Le champ a bien été créé sans cette option de UNSIGNED. Il est à False.

    J'ai tout de même essayer avec ce paramètre à vrai et ça ne change pas mon problème.

    Quel est la différence entre ISNULL et COALESCE ?

    J'ai du mal à croire que ce soit le composant ADOQuery

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Ben si ça fonctionne, sur la même base, dans TOAD et pas en Delphi, c'est bien que le problème doit venir de l'interface avec Delphi... Sinon, ça ne marcherait pas sous TOAD .
    Essaie éventuellement la même requête dans une console MySQL pour voir ce que ça renvoie.
    La différence entre ISNULL et COALESCE porte notamment sur le nombre de paramètres. ISNULL ne prend que 2 paramètres, là où COALESCE en prend plusieurs et renvoie le premier non null qu'il rencontre.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre éclairé

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Par défaut
    J'ai essayé en mode console et ça fonctionne correctement.

    C'est donc bien le composant, voir un paramétrage du composant...

    Je vais essayé de voir ceci dans la rubrique concerné.

    Sinon, je modifierais mon code pour éviter ce problème en effectuant un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT COALESCE(CodeReference, 0) CodeReference
      FROM REFERENCE
    Merci en tout cas

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Côté MySQL, c'est donc ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. [Oracle] équivalent mysql_num_rows sur oracle?
    Par erox44 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 14/04/2008, 14h26
  2. Précision sur Oracle 9iAS r2
    Par Patmane dans le forum Oracle
    Réponses: 9
    Dernier message: 18/03/2007, 04h41
  3. Réponses: 17
    Dernier message: 15/05/2006, 12h28
  4. problème de charge CPU SUR ORACLE
    Par crasho007 dans le forum Administration
    Réponses: 35
    Dernier message: 19/05/2004, 15h35

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