2011-06-28 3 views
0

J'essaye de me connecter à Oracle en utilisant Perl.Connexion à Oracle à partir de Perl

J'essaie de me connecter à partir d'une machine Windows XP sur laquelle Perl est installé. J'ai également téléchargé Oracle SQL Developer et Oracle Instant Client. Je peux me connecter à Oracle DB en utilisant Oracle SQL Developer en utilisant le type de connexion TNS.

J'utilise le Perl suivant.

use DBI; 
$db=DBI->connect("dbi:Oracle", "username", "password") or die "Can't connect $DBI::errstr\n"; 

Je reçois le message d'erreur suivant. Ai-je besoin de faire quoi que ce soit avec Oracle Instant Client, car il ne dispose pas d'un programme d'installation. Y a-t-il autre chose qui a besoin d'être configuré en Perl?

Nous vous remercions de votre aide.

* EDIT *

Y at-il des variables que je dois mettre au début de Perl pour relier soit SQL Developer ou Instant Client?

Répondre

1

J'ai utilisé une méthode différente pour connecter Perl à une base de données Oracle. J'ai utilisé SQLPlus au lieu de DBI. C'est un utilitaire de ligne de commande d'Oracle qui peut être appelé depuis Perl. Voici un exemple de mon code. Le fichier test.sql peut contenir une ou plusieurs requêtes et doit se terminer par exit.

my $connect_string = 'username/[email protected]'; # connection to the DB 
my $file = 'test.sql'; # location of SQL file. The file must end with "exit" 

my $sqlcmd = "sqlplus -S $connect_string \@$file"; # sqlcommand 
system $sqlcmd; # executes command 
0

Avec ce message d'erreur et votre morceau de code, je voudrais tout d'abord vérifier si elle aide à état explicitement dans le Servername le premier paramètre de $db=DBI->connect(.. (le cas échéant, google pour quelques exemples).

Si cela n'aide pas, je vérifierais alors la valeur de la variable d'environnement OCI_NLS_CHARSET_ID.

+0

J'ai essayé d'indiquer explicitement le nom du serveur et j'ai toujours eu la même erreur. – Gilbert

0

J'ai eu le même problème dans et à la fin il pourrait être résolu. Dans mon cas, il s'est avéré (après beaucoup d'enquête et de lecture) que la racine du problème était le mélange des versions. Le serveur était 11.2 pendant ce temps j'ai utilisé le paquet 12.1 Instant Client pour construire Oracle.dll pour DBD::Oracle. J'ai donc téléchargé la version 11.2 (à partir de Oracle) et ce message d'erreur a juste disparu! J'ai lu le manuel Trooble Shooting, mais il semble que 3 paquets soient nécessaires: Basic, SDK et sqlplus (le dernier est utilisé par le processus de construction pour déterminer la version du serveur).

Avant construire certaines variables bash ont dû être mis:

export ORACLE_HOME=/cygdrive/c/install/instantclient_11_2 
PATH+=:"$ORACLE_HOME" 
export TNS_ADMIN="$HOME" 

Le plus tard nécessaire pour trouver oci.dll qui est référencé par Oracle.dll. Ceci est ajouté à PATH car Windows recherche PATH pour trouver les DLL non LD_LIBRARY_PATH. Fichier tnsnames.ora peut être dans $TNS_ADMIN dir, ou dans /var/opt/oracle ou dans /etc (ou d'autres endroits). Les noms de service définis peuvent être répertoriés par DBI->data_sources('Oracle').

Et voilà! J'espère que cela pourrait aider!

Questions connexes