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 :
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 $dbh = DBI->connect("dbi:Oracle:host=$host;sid=$sid;port=$port","$user","$pwd") || die "La connexion a échoué !";
... et il s'y exécute sans aucun problème et sans aucune erreur.
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
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 :
J'ai donc positionné les variables d'environnement ad hoc dans mon code, ce qui donne ceci :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.
Mais ça ne change rien.
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é !";
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.
Partager