2009-11-25 12 views
1

Je charge et insère des données dans une base de données Oracle. Lorsque je rencontre des caractères spéciaux qui ressemblent à des caractères chinois, j'obtiens une erreur comme la ligne rejetée car la taille maximale de la colonne a été dépassée. Je ne reçois pas cette erreur pour les lignes qui ont des caractères anglais qui semblent être de même longueur pour la même colonne. J'utilise la fonction SUBSTR et TRIM mais ça ne marche pas. Comment puis-je déterminer si la longueur d'une chaîne en chinois dépasse la taille de la colonne?Oracle colonnes de table de chargement SQL ayant des caractères spéciaux

+0

Avez-vous configuré NSLANG? – JuanZe

Répondre

3

si vos colonnes sont définies comme VARCHAR2(XX) [par exemple VARCHAR2(20)], vous recevrez une erreur si vous essayez d'insérer une chaîne qui est plus de XX octets longue.

La fonction SUBSTR calcule la longueur en nombre de caractères , pas octets. Pour sélectionner une sous-chaîne en octets, utilisez la fonction SUBSTRB.

SQL> select substr('ЙЖ', 1, 2) from dual; 

SUBSTR('ЙЖ',1,2) 
------------------ 
ЙЖ 

SQL> select substrb('ЙЖ', 1, 2) from dual; 

SUBSTRB('ЙЖ',1,2) 
------------------- 
Й 

Edit: Comme suggéré par Adam, vous pouvez utiliser Arithmétique de caractère si vous définissez vos colonnes et des variables comme VARCHAR2 (XX CHAR). Dans ce cas, vos colonnes pourront stocker des caractères XX dans tous les jeux de caractères (jusqu'à un maximum de 4000 octets si vous les stockez dans une table).

+1

Vous pouvez suggérer de modifier les définitions de schéma de 'VARCHAR2 (XX)' à 'VARCHAR2 (XX CHAR)' pour que les longueurs de colonne soient en caractères et non en octets. –

+0

Merci Adam, j'ai mis à jour ma réponse –

+0

après avoir changé la définition de schéma de colonne en utilisant VARCHAR2 (XX CHAR), le problème de rejet de ligne a été éliminé, mais je dois charger cette valeur de la mise en scène à une table principale définition du schéma, donc, j'ai fait une sous-chaîne qui va restreindre à ne pas être plus que la taille de la colonne, mais maintenant je reçois une nouvelle erreur en faisant un SELECT * FROM TABLE, ORA-29275: caractère multi-octet partiel. – Walker