2009-07-28 19 views
0

Je reçois ce message d'erreur en production.java.sql.SQLException: [BEA] [Pilote Oracle JDBC] [Oracle] ORA-01438: valeur supérieure à la précision spécifiée autorise cette colonne

Malheureusement, cela provient d'une application achetée et le processus de support n'est pas précisément rapide.

Cela se produit lorsque des données sont copiées d'une table à une autre. Les deux tables sont censées avoir les mêmes types et longueurs de colonnes. Jusqu'à présent, je l'ai examiné un certains d'entre eux en procédant comme suit:

select distinct(length(column_name))) from source_table 

comparer ensuite la valeur avec la longueur de nom_colonne dans la table cible, mais il me prend beaucoup de temps.

Y a-t-il une meilleure façon d'effectuer cette vérification?

Je veux identifier quelle colonne contient les données dont la longueur dépasse la limite de la source.

Je travaille avec:

Oracle9i Enterprise Edition Release 9.2.0.7.0 - Production 
With the Partitioning, OLAP and Oracle Data Mining options 
JServer Release 9.2.0.7.0 - Production 

Répondre

0

Une méthode de la force brute pour le débogage ceci:

Vous pouvez créer un script qui exécute une boucle FOR et insère ligne par ligne du tableau A au tableau B , sortie de l'identifiant de ligne ou de certaines données pertinentes à la console. Une fois que vous avez identifié la mauvaise ligne, vous pouvez essayer de mettre à jour colonne par colonne d'une ligne existante avec les données de colonne de la mauvaise ligne jusqu'à ce que vous trouviez votre coupable.

+0

je dois créer une table de C car je ne veux pas la moitié migrate A à B et le laisser dans un état incohérent .... Je me demande mmhhh combien cela prendrait-il? La table A est d'environ 100 colonnes et contient environ 9k enregistrements ... – OscarRyz

+0

Oui, cela semble lourd. Cependant, si vous travaillez sur le tableau A à partir de zéro, vous pouvez le tronquer une fois que vous avez terminé votre recherche. Bonne chance! – akf