Pourquoi suis-je “de la conversion de Données ou de données erreur de cartographie. SQLCODE=-802” sur un simple DB2 instruction select?
Je suis l'accès DB2 d'informations sur IBM i (AS400) avec PHP.
Avec ce code:
$query = "SELECT * FROM QS36F.MYTABLE WHERE MYFIELD=120006";
$result = db2_prepare($conn, $query);
db2_execute($result);
$i=0;
while($row = db2_fetch_assoc($result) or die(db2_stmt_errormsg())){
$i++;
print "Row " . $i . " successful<br />";
}
J'obtiens:
SÉLECTIONNEZ * À PARTIR DE QS36F.MYTABLE WHERE MYFIELD=120006
La ligne 1 de succès
La ligne 2 de succès
Ligne 3
La ligne 4 de succès
Conversion de données ou de données erreur de cartographie. SQLCODE=-802
Il devrait y avoir plus de 4 résultats.
Pourquoi cette erreur se produit?
Plus de détails:
- Ce même message d'erreur semble se produire sur une valeur que je recherche dans MYFIELD bien qu'il peut être après un nombre différent de bons résultats
- MYFIELD est NUMÉRIQUE(7,0)
- Je pouvez rechercher d'autres champs de la table(y compris numériques) et il fonctionne très bien.
OriginalL'auteur Mike | 2011-02-15
Vous devez vous connecter pour publier un commentaire.
Il n'y avait pas valide décimal données dans le tableau. Il y avait des blancs à la place des zéros. J'ai déménagé de zéros dans ces espaces et qui a résolu le problème
OriginalL'auteur Mike
Si cela peut aider quelqu'un d'autre, j'ai eu le même message d'erreur et a découvert que j'étais un jointure entre le décalage des types de données: un
DECIMAL(2,0)
champ et unVARCHAR(5)
champ. Jusqu'à ce que nous avonsVARCHAR
s qui peuvent être convertis enDECIMAL(2,0)
qu'il peut travailler, sinon il génère l'erreur.OriginalL'auteur bluish
Selon la documentation, SQL0802 est de dépassement de capacité arithmétique. Plus que probablement, l'une des lignes a une valeur de données qui est trop grand pour la variable php que vous avez déclaré pour elle, même si je ne peux pas voir que, dans le code que vous avez posté. Sinon il ya quelques autres drôles de conversion de données ne se passe pas correctement, par exemple si le QS36F.MYTABLE objet est en fait une vue de la sélection d'une autre table, et est la conversion de l'une des colonnes.
Il pourrait être facile de dépassement d'une variable PHP. Mais parce que vous êtes à l'aide de
SELECT * FROM...
et il n'existe pas de définitions de colonne montré à nous, nous ne pouvons pas dire pourquoi il se passe ici. Dans le code de production,SELECT * FROM...
devrait essentiellement jamais être utilisé; spécifiez de la colonne de la liste ou tout simplement accepter que les réponses ne seront jamais retrouvées.OriginalL'auteur Michael Sharek