Bonjour à tous,

Je vous plante le décor... je souhaite développer, en perl sous Windows, un petit utilitaire capable de se connecter à une base Oracle distante pour effectuer des requêtes simples (un select, un insert, ...). Cet utilitaire doit être déployable sur un ensemble de machines qui ne diposent ni du noyau Perl, ni d'un client Oracle (ma contrainte est de ne RIEN installer sur ces machines où je dispose de droits restreints).

Je dispose donc :
- de l'environnement Strawberry Perl
- du module DBI
- du module PAR:: Packer et de son outil pp permettant de générer des exécutables autonomes

Et j'ai donc dans mon source la ligne de code suivante pour effectuer la connexion à la base :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid;port=$port","$user","$pwd") || die "La connexion a échoué !";
Sur la machine de développement, je génère l'exécutable avec la commande suivante...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
pp monscript.pl -l C:\StrawberryPerl\c\bin\libmysql_.dll -l C:\StrawberryPerl\c\bin\libpq_.dll -l C:\StrawberryPerl\c\bin\libeay32_.dll -l C:\StrawberryPerl\c\bin\zlib1_.dll -l C:\StrawberryPerl\c\bin\ssleay32_.dll -l C:\oracle\product\10.2.0\client_1\BIN\oci.dll -o monscript.exe
... et il s'y exécute sans aucun problème et sans aucune erreur.

Or, en lançant l'utilitaire (compilé) sur une machine de test (dépourvue de perl et de client Oracle, donc), j'ai le message d'erreur suivant :

DBI connect('host=monhote.mondomaine.fr;sid=MONSID;port=1521','monlogin',...) fail
d: ERROR OCINlsEnvironmentVariableGet(OCI_NLS_CHARSET_ID) Check NLS settings et
. at script/monscript.pl line 84.
La connexion a échoué ! at script/monscript.pl line 84.
J'ai donc positionné les variables d'environnement ad hoc dans mon code, ce qui donne ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
$ENV{NLS_LANG}="French_France.WE8ISO8859P15";
$ENV{OCI_NLS_CHARSET_ID}="French_France.WE8ISO8859P15";
$dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid;port=$port","$user","$pwd") || die "La connexion a échoué !";
Mais ça ne change rien.

Y'a-t-il une solution ?
La présence d'un client Oracle sur la machine est-elle incontournable ?

Merci beaucoup pour vos avis éclairés.