2009-09-22 3 views
1

Cela se produit lors de l'extraction de valeurs d'une longueur maximale de 50 dans un tampon qui ne peut contenir que 30 caractères.ora-01406 Erreur lors de l'extraction des valeurs à l'aide de l'OCI

J'ai déjà recherché l'erreur et trouvé une solution possible, qui est d'étendre la taille du tampon auquel la valeur est liée.

Le problème est que cela se produit uniquement dans certains de nos systèmes et pas dans d'autres. Est-ce que la version Oracle a quelque chose à voir avec ça? Si oui, quelle est la version dans laquelle cette erreur a été changée?

Les versions Oracle que nous utilisons sont 10.2.0.1 et 10.2.0.3

Répondre

1

Le bug listé dans la question a été corrigé dans 10.2.0.3 et l'erreur est seulement donnée dans les versions d'Oracle avant cela. Modifier: le même problème a été observé dans Oracle 10.2.0.4. Edit2: Lors de la définition de curseurs pour les colonnes CHAR/VARCHAR dans OCI (nous utilisons un wrapper à cet effet), la taille de la chaîne qui est liée à une colonne doit être au moins une supérieure à la largeur maximale de la colonne.

par exemple. Nom de la colonne: U_NAME Type: VARCHAR (30)

1. char zName [30]; pCursor-> Définir (zName, 3O); // cela se bloquerait si la colonne avait une valeur de 30 caractères

2. char zName [31]; pCursor-> Définir (zName, 3O); // cela se bloquerait si la colonne avait une valeur de 30 caractères

3. char zName [31]; pCursor-> Définir (zName, 31); // Correct. ne planterait pas pour toute valeur

0

Vous avez un bug dans votre code, en ce qu'elle ne permet que de 30 caractères quand il peut recevoir 50. Pourquoi ne pas simplement le fixer plutôt que s'inquiéter de la version d'Oracle avec laquelle le bogue pose des problèmes?

+1

Nous allons le réparer. Mais dans un environnement de production, ne pas être capable de recréer un bogue est un problème critique qui doit être résolu et résolu afin d'éviter que de telles erreurs ne se reproduisent. Cela a été classé comme un bug dans Oracle (bug 4546618), ce qui conduit à une confusion supplémentaire quant à l'endroit exact où le correctif devrait avoir lieu. Corriger le bug est important mais nous sommes plus préoccupés par la prévention à long terme. – Gayan

+0

OK, mais je suis curieux: que fait Oracle 10.2.0.3 maintenant - tronquer silencieusement la valeur à 30 caractères? Je voudrais que ce soit pire? –

+0

Le problème réside dans le fait que je donne la longueur de la chaîne lorsque je définis des valeurs pour le curseur. Désolé de ne pas le mentionner dans la question initiale. Quoi qu'il en soit, la valeur dans la base de données devrait être tronquée à cette longueur, ce qui ne semble pas arriver dans 10.2.0.1. – Gayan

Questions connexes