2010-12-12 21 views
4

J'ai un script perl qui insère des enregistrements d'un fichier texte dans notre base de données. Chaque fois que l'enregistrement a un caractère multi-octets comme "RODR_Í_GUEZ". Je reçois l'erreur ORA-01461, mais je ne suis nulle part près des 4000 caractères pour passer de varchar2 à longueFrapper ORA-01461 lors de l'insertion de caractères multi-octets de Perl dans Oracle

Cadre:

$ENV{NLS_CHARACTERSET} = 'AL32UTF8'; 

avant de connecter ne semble pas aider. L'utilisation d'un client java (SQuirreL SQL) et l'écriture manuelle de l'instruction INSERT INTO insèrent bien l'enregistrement, donc je suis sûr que ce n'est pas la façon dont la base de données est configurée.

Des pensées?

Répondre

5

Vous souhaitez probablement définir la variable d'environnement NLS_LANG. Pour les systèmes Unix-ish, un script fourni dans $ ORACLE_HOME/server/bin est appelé nls_lang.sh pour afficher une valeur raisonnable pour votre système, basée sur la variable d'environnement LANG.

par exemple. pour mon système (LANG = fr_FR.UTF-8) le paramètre Oracle équivalent est

NLS_LANG=ENGLISH_UNITED KINGDOM.AL32UTF8 

Plus d'info: http://forums.oracle.com/forums/thread.jspa?threadID=381531

Sergiusz de poste, il dit pratiquement tout ce que vous devez savoir: Je vais simplement ajouter que la Le pilote Perl DBD :: Oracle est basé sur OCI et le pilote JDBC Java pur ne l'est pas. Ils fonctionnent donc différemment dans le même environnement.