Bonjour,
Je rencontre un curieux problème lors du chargement de données avec sqlldr.
Un champ, déclaré en CHAR(225), de l'un des enregistrements du fichier, contient un texte tronqué à 225 caractères comprenant des minuscules accentuées.
Ce champ est encadré par des double-quotes(") et est séparé des champs précédent et suivant par le caractère $.
ex : $"Début du texte...........maté "$ (avec un espace entre é et ")
Les options du fichier de contrôle sont :
FIELD TERMINATED BY '$' OPTIONNALY ENCLOSED BY '"'
Tous les enregistrements (+ de 400 000) sont correctement chargés avec respect des caractères accentués sauf celui décrit précédemment.
Le fichier log indique que ni le terminated field, ni le enclosed field n'a été trouvé.
Le problème disparait en remplaçant le "é" final par un "e" et en laissant les autres "é".
Le problème subsiste en déclarent le champ en CHAR(230).
Quelqu'un a-t'il une idée sur l'origine de ce problème?
Pour info,
le NLS_LANG de la base et du client oracle est AMERICAN_AMERICA.AL32UTF8
et le CHARACTERSET spécifié dans le fichier de contrôle est AL32UTF8
11/03/2010-Complément
J'ai identifié l'origine du problème. D'après la documentation d'Oracle, l'utilisation d'un character set multibyte interdit d'avoir des caractères shift-sensitive (é) en début et fin de chaîne de caractères.
Je n'ai pas encore trouvé le moyen de contourner ce problème.
Partager