Question

J'ai eu un trouble dans ma base de données ici, j'utilise Firebird 1.5.3 et il fonctionne très bien jusqu'à ce que NOE pour lire ou écrire de façon normale, mais quand je lance une procédure, je suis arrivé résultat ligne vide et le message suivant:

exception arithmétique, numérique trop-plein ou troncature chaîne.

code SQL: -802 IB Numéro d'erreur: 335544321

Je l'ai comparé avec mon db sauvegarde il y a un mois, il est très bien passé, je reçois des données dans les lignes. Pour assurer que mon changement était pas de code, je copie coller à la fois dans la procédure Winmerge (de comparateur diff) mais diffrent rien. Pour assurer mon erreur provenait de données, je lance ma procédure ancienne transaction datée (1 an de données), encore que je reçois ces messages.

Je vérifie la logique aritmethic dans la procédure, la modification, mais pas de chance. Est-ce que quelqu'un peut aider?

Thx un groupe,

Était-ce utile?

La solution

Après une longue traçage dans le code et les données, je trouve l'obstacle qui me casser les pieds en quelque sorte dehors. Il y avait un changement dans les données de base qui a maintenant caractère longger (varchar). Dans ma procédure, il a été mis en une plus petite taille de varchar, laissez-dire 10 caractères. Alors que son nouveau chaîne va environ 15. Ici l'erreur ... ou troncature string .... . Mais de toute façon grâce de votre attention à mon problème et merci pour les indices que vous avez écrit, il me sauver en quelque sorte, me donner l'idée de tracer vers le haut.

Thx un groupe,

Autres conseils

Comportement différent (en db sauvegarde et un live) avec exactement les mêmes données est étrange. Peut-être une autre procédure ou de trigger est de déconner avec votre requête dans le db en direct.

Puisque vous dites que vous ne pouvez pas publier le code ici, je vais vous proposer quelque chose que vous pouvez essayer d'éliminer d'autres possibilités.

"débordement numérique ou troncature de chaîne." est l'erreur que vous obtenez.

  • Est-ce que la requête a SUM() ou autre fonction aggegate?
  • -t-il une chaîne fonction manipulation?

Si oui sur tout ce qui précède, essayez de supprimer une telle pièce, un par un, et exécuter la requête modifiée. Ainsi, vous pouvez repérer quelle partie de la requête produit l'erreur.


Note: La même structure db, les mêmes données et même requête ne pas produisent toujours mêmes résultats en raison des fonctions non-déterministe comme NOW() et RAND(). Si les résultats de ces fonctions sont utilisées dans d'autres calculs, des erreurs arithmétiques comme la division par 0 ou de débordement ou d'autres types d'erreurs peuvent se produire en une seule fois et non pas dans une autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top