connexion à une base oracle avec DBI

connexion à une base oracle avec DBI - Perl - Programmation

Marsh Posté le 28-03-2007 à 13:35:44    

Salut,
 
J'ai un script, qui est censer me permettre de me connecter à une base oracle mais cela ne fonctionne pas;j'ai cette erreur
 

Citation :

DBI connect('IRON1','user',...) failed: ORA-12154: TNS:could not resolve t
he connect identifier specified (DBD ERROR: OCIServerAttach) at C:\Documents and
 Settings\billy\scripts\connect.pl line 14
Database connection not made: ORA-12154: TNS:could not resolve the connect ident
ifier specified (DBD ERROR: OCIServerAttach) at C:\Documents and
 Settings\billy\scripts\connect.pl line 14.


 
 
à la ligne 14 j'ai cela

Citation :

my $dbh = DBI->connect("dbi:Oracle:$dbname", $user, $passwd) or  
die "Database connection not made: $DBI::errstr";


 
Je ne vois pas pourquoi,pourtant j'ai bien installer un client oracle sur ma machine windows afin de pouvoir me connecter à ma base sur un serveur unix;
j'ai creer une connexion ODBC, je l'ai tester et elle fonctionne,
et des que je l'utilise dans le script , sa plante et j'ai le message d 'erreur;
 
SI quelqu'un pouvait m'eclairer;
 
 
Merci.

Reply

Marsh Posté le 28-03-2007 à 13:35:44   

Reply

Marsh Posté le 28-03-2007 à 13:54:27    

si tu utilises ODBC c'est à l'ODBC qu'il faut te connecter avec les drivers ... suspense ... ODBC...


Message édité par anapajari le 28-03-2007 à 13:54:37
Reply

Marsh Posté le 28-03-2007 à 14:01:54    

mon script de connexion est comme cela

Code :
  1. #!/usr/bin/perl -w
  2. use DBI;
  3. use DBD::Oracle;
  4. use strict;
  5. my $dbname = 'client';
  6. my $user = 'user';
  7. my $passwd = 'pass';
  8. my $dbh = DBI->connect("dbi:Oracle:$dbname", $user, $passwd) or
  9. die "Database connection not made: $DBI::errstr";
  10. $dbh -> disconnect;


 
et je veux me connecter à cette base oracle

Citation :


client=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = test.toto)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = client.toto.fr)
    )
  )


 
normalement cela devrait fonctionner car je l'ai deja fait sous unix

Reply

Marsh Posté le 28-03-2007 à 14:07:03    

depuis la machine où tu lances ton script perl :

Code :
  1. tnsping client


 
si ca répond pas, c'est que tu as un pb de config du client oracle
si ca répond, c'est chelou car il ne trouve pas la config., dans ce cas là tu peux forcer la variable d'environnement TNS_ADMIN dans ton script :

Code :
  1. $ENV{TNS_ADMIN} = '<chemin du repertoire contenant tnsnames.ora>';


Message édité par couak le 28-03-2007 à 14:07:15
Reply

Marsh Posté le 28-03-2007 à 15:29:15    

ouai c'est bon , il voit la base
je l 'avais pas mise dans le fichier tnsnames c'etait pour ça

Reply

Marsh Posté le 28-03-2007 à 16:40:56    

DBI c'est bien mais ça a certaine limite
je fais une requete et je lui demande de m'afficher ce qu'elle retoure

Code :
  1. while (my $t = $sth->fetchrow_array()) {
  2. print " $x = $t \n";
  3. }


 
si la colonne est vide, ça plante et j'ai un "use of unintialized value....
je suis obliger de rajouter ça
if( not defined($t)){ $t='vide'; }

Reply

Marsh Posté le 28-03-2007 à 19:34:25    

c'est ce qui arrive quand on met "use strict;" :o

Reply

Marsh Posté le 29-03-2007 à 08:32:11    

nan mais surtout fetchrow_array retourne ... un array [:dawak]
Donc tu es censé mettre le retour dans un tableau ( @t ), il serait effectivement urgent que tu mettes un use strict dans tes scripts [:dawak]

Reply

Marsh Posté le 29-03-2007 à 10:06:28    

je sais qu'il retourne un tableau
mais vu que je retourne qu'une valeur dans ma requete, c'est un peu bête d'utiliser un tableai

Reply

Marsh Posté le 29-03-2007 à 10:16:49    

alors à ce moment là tu dois écrire les choses "proprement":

Code :
  1. my ($t) = $sth->fetchrow_array();
 

honnêtement suis le conseil de coak, rajoute "use strict;" au début de ton script...


Message édité par anapajari le 29-03-2007 à 13:27:12
Reply

Marsh Posté le 29-03-2007 à 10:16:49   

Reply

Marsh Posté le 29-03-2007 à 11:02:36    

ok
je rajoute les paranthese,je les avais au depart,quand ma requete renvoyai 3 champs;
pour le use strict;
je l'ai mis, je le met toujours;

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed