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

DB2 Discussion :

[SQL0802] Erreur de conversion ou de mappage des données.


Sujet :

DB2

  1. #1
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 169
    Points : 121
    Points
    121
    Par défaut [SQL0802] Erreur de conversion ou de mappage des données.
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select count(*)
    from t1, t2
    where t1.c1 = t2.c1
    and t1.c2 = 1
    Error: [SQL0802] Erreur de conversion ou de mappage des données.
    SQLState: 22023
    ErrorCode: -802


    t1.c2 est de type NUMERIC et de longueur 2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*)
    from t1, t2
    where t1.c1 = t2.c1


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select count(*)
    from t1 
    where t1.c2 = 1


    Je ne comprends plus rien...

  2. #2
    Membre actif
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 179
    Points : 275
    Points
    275
    Par défaut
    Une valeur nulle dans une des colonnes peut peut-être provoquer cela ?

  3. #3
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 169
    Points : 121
    Points
    121
    Par défaut
    Merci pwrdwnsys, t'y est presque...t1.c1 contient des valeurs vides...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*)
    FROM t1, t2
    WHERE t1.c1 = t2.c1
    and not t1.c1 = ''
    AND t1.c2 = 1


    Mais pourquoi la requête ci dessous fonctionne quand même sans exclure les valeurs vides?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(*)
    FROM t1, t2
    WHERE t1.c1 = t2.c1

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Bonjour,

    t1.c1 et t2.c1 sont-ils de même type et de même taille ?
    Si ce n'est pas le cas, un cast règlera le problème.
    Le Porc est un loup pour le Porc.

  5. #5
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 169
    Points : 121
    Points
    121
    Par défaut
    Merci, asmduty, de joindre à cette discussion,

    Je te confirme que t1.c1 et t2.c1 sont de même type et de même taille, CHAR(14).

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Pour les problèmes SQL, on demande :
    - DDL des tables
    - jeu de donnée en entrée
    - jeu de donnée en sortie (ou jeu de donnée du problème)
    - requête exécutée amenant le problème

    Ceci afin de facilité la résolution des problèmes (et leur compréhension, et là perso j'ai du mal à comprendre ce que vous faites et quelles résutlats sont bon ou pas ..)


    De plus ne confondez pas :
    - chaine vide
    - null

    Ce sont deux choses bien distinct en SQL.
    null n'est pas une valeur, mais un état qui exprime l'absence d'une valeur.
    C'est pour celà que l'on test si une colonne est nul via cette commadne SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where ma_col is null

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    Du coup je ne vois pas pourquoi cette erreur peut apparaitre ...

    Moi je l'avais pas toujours, mais parfois parce que je faisais des jointures sur plusieurs critères, dont l'année qui était numérique dans une table et char dans l'autre.
    Du coup ça passait très bien sans conversion, sauf un jour j'ai rajouté un AND sans rapport et j'avais eu cette erreur.
    Une fois casté le numérique en CHAR c'était bon.

    Pourquoi ne pas essayer aussi une syntaxe comme celle-ci en SQL 92 plutot que SQL 86 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*)
    FROM t1
    INNER JOIN t2
    ON t1.c1 = t2.c1
    WHERE t1.c2 = 1
    Pourquoi ne pas essayer d'entourer le 1 de quotes, même si c'est un numérique en DB2 ça ne donne pas d'erreur.

    Evidemment tout ça c'est de la bidouille mais si une de ces solutions marche ça oriente quand même vers la source d'erreur.
    Le Porc est un loup pour le Porc.

  8. #8
    Membre régulier
    Inscrit en
    Mars 2010
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 169
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par asmduty Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*)
    FROM t1
    INNER JOIN t2
    ON t1.c1 = t2.c1
    WHERE t1.c2 = 1
    Cela ne fonctionne pas non plus, le même message d'erreur est reproduit.

    Citation Envoyé par asmduty Voir le message
    Pourquoi ne pas essayer d'entourer le 1 de quotes, même si c'est un numérique en DB2 ça ne donne pas d'erreur.
    Non plus

    L'erreur vient forcément de t1.c1 qui contient une valeur VIDE (NULL pour ceux qui ne l'a pas vu ou compris...)

    Citation Envoyé par hittony Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT count(*)
    FROM t1, t2
    WHERE t1.c1 = t2.c1
    and not t1.c1 = ''
    AND t1.c2 = 1

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    t1.c2 est de type NUMERIC et de longueur 2
    Je te confirme que t1.c1 et t2.c1 sont de même type et de même taille, CHAR(14).
    On va continuer jusqu'a combien de poste pour avoir un début de réponse cohérent ?

    Le dll des tables ?

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Points : 1 327
    Points
    1 327
    Par défaut
    En y réfléchissant bien ce n'est pas sans logique, si tu fais une jointure sur un champs qui peut être vide ça n'a pas de sens, et tu auras un produit carthésien à partir du moment ou dans une de tes 2 tables ton champs n'est pas renseigné.

    Ce qui est plus difficile à comprendre est que ça marche sans le AND, et pas avec, et là à mon avis c'est plus lié au fonctionnement du SGBD
    A part ces messieurs de chez IBM, par grand monde ne doit savoir pourquoi ça fonctionne comme ça.
    Le Porc est un loup pour le Porc.

Discussions similaires

  1. [XL-2007] Ne pas effectuer une conversion lorsque l'une des données est nulle.
    Par Tomz57 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 21/04/2015, 09h35
  2. Réponses: 3
    Dernier message: 02/10/2011, 14h50
  3. Gestion des erreurs de conversion de type de données
    Par FMJ dans le forum Développement
    Réponses: 11
    Dernier message: 09/07/2009, 23h27
  4. erreur dans la tâche Mappage des références de ressource
    Par kramer Mc Barreth dans le forum Websphere
    Réponses: 4
    Dernier message: 27/12/2007, 14h01
  5. Réponses: 1
    Dernier message: 09/07/2007, 12h11

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