[perl]sqlplus (no module)
fxtaa
Messages postés
1050
Date d'inscription
Statut
Membre
Dernière intervention
-
fxtaa Messages postés 1050 Date d'inscription Statut Membre Dernière intervention -
fxtaa Messages postés 1050 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
La contrainte est simple, je ne peux pas utiliser de module autres que ceux fournit de bases avec perl.
J'aimerai récupérer la version d'Oracle coté serveur, celle ci est marqué au moment de la connexion :
le code :
Bien évidemment ca ne marche pas, j'ai essayé en rajoutant un "exit" mais ca plante pareil.
La contrainte est simple, je ne peux pas utiliser de module autres que ceux fournit de bases avec perl.
J'aimerai récupérer la version d'Oracle coté serveur, celle ci est marqué au moment de la connexion :
le code :
$bob = `sqlplus PSEUDO/PASS`; $bob =~ /Oracle Database 10g Enterprise Edition Release (.*) - /; print $1;
Bien évidemment ca ne marche pas, j'ai essayé en rajoutant un "exit" mais ca plante pareil.
A voir également:
- Error 45 initializing sql*plus
- Nº sur clavier ✓ - Forum Bureautique
- Igfxtray module ✓ - Forum Virus
- No available networks no response from server iron tv pro - Forum TV & Vidéo
- Pas de module ci - Forum TV & Vidéo
- Manque cam module - Forum TNT / Satellite / Réception
8 réponses
Ca ne fonctionne pas, après l'exécution du perl le programme reste bloqué.
Après un [ctrl]+c, pour annuler l'exécution du perl, j'ai alors un message d'erreur :
/bob/tmp>Error 45 initializing SQL*Plus
Internal error
Après un [ctrl]+c, pour annuler l'exécution du perl, j'ai alors un message d'erreur :
/bob/tmp>Error 45 initializing SQL*Plus
Internal error
C'est plus qu'une piste, c'est la solution!
Malheureusement je ne peux pas utiliser de module externe, je ne peux utiliser que les modules natifs de perl.... Galère...
Malheureusement je ne peux pas utiliser de module externe, je ne peux utiliser que les modules natifs de perl.... Galère...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon j'ai trouvé, c est pas super propre mais sans module j'ai pas trouvé d autres facons :
$version a beaucoup d 'antislash car il faut empécher l'interprétation du $version comme une variable pour perl, shell et sqlplus....
$shell = "X=`sqlplus -S login/pass <<EOFTOTO set HEADING off set LINESIZE 250 set PAGESIZE 0 set SQLPROMPT \"\" set ECHO off set WRAP off set VER off set FEED off set TERM off set SQLNUMBER OFF SELECT * FROM v\\\\\$version ; EOFTOTO` echo \"\$X\" >> rqt.txt"; open (FILE, ">rqt.sh"); print FILE $shell; close FILE; system ". rqt.sh"; unlink "rqt.sh"; open (FILE, "rqt.txt"); $/ = "66210-34" ; $result = <FILE>; $/ = "\n" ; close FILE; unlink "rqt.txt"; if ($result =~ /Edition Release (.*) - /){ $oraserv = $1; print $oraserv;
$version a beaucoup d 'antislash car il faut empécher l'interprétation du $version comme une variable pour perl, shell et sqlplus....
Salut,
Tu aurais pu utiliser open de cette manière pour lire depuis une commande
La commande shell
Le script
Quelque chose comme ça dans ton cas
Tu aurais pu utiliser open de cette manière pour lire depuis une commande
La commande shell
$ gcc --version gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) Copyright (C) 2004 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Le script
$ cat readpipe.pl #!/usr/bin/perl open LIREPIPE,"gcc --version |" or die "E/S : $!\n"; while (<LIREPIPE>){ print if /gcc/i; } $ perl readpipe.pl gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
Quelque chose comme ça dans ton cas
my $oraserv; my $connect_oracle = "X=`sqlplus -S login/pass <<EOFTOTO set HEADING off set LINESIZE 250 set PAGESIZE 0 set SQLPROMPT \"\" set ECHO off set WRAP off set VER off set FEED off set TERM off set SQLNUMBER OFF SELECT * FROM v\\\\\$version ; EOFTOTO` echo \"\$X\" >> rqt.txt"; open FILE,"$connect_oracle |" or die "E/S : $!\n"; while (<FILE>){ next unless /Edition Release (.*) - /; $oraserv = $1; } print $oraserv;
Salut, je suis désolé mais ca ne fonctionne pas.
Le open File fonctionne bien et exécute bien la requete, mais j'ai l'impressions que le while <FILE> ne fonctionne pas.
Par exemple si je fais un print dans le while :
ca ne print rien et je n'ai pourtant pas l'erreur du open FILE..... Je ne comprend pas tres bien le fonctionnement de perl pour ce coup ci.
Le open File fonctionne bien et exécute bien la requete, mais j'ai l'impressions que le while <FILE> ne fonctionne pas.
Par exemple si je fais un print dans le while :
open FILE,"$connect_oracle |" or die "E/S : $!\n"; while (<FILE>){ print "je suis dans le while \n"; next unless /Edition Release (.*) - /; $oraserv = $1; }
ca ne print rien et je n'ai pourtant pas l'erreur du open FILE..... Je ne comprend pas tres bien le fonctionnement de perl pour ce coup ci.
J'ai fait comme ca en fait, j'open la variable qui contient la commande shell qui contient la commande sqlplus et qui crée rqt.txt. Apres j'open rqt.txt.
Voici le code :
Voici le code :
$shell = "X=`sqlplus -S login/pass <<EOFTOTO set HEADING off set LINESIZE 250 set PAGESIZE 0 set SQLPROMPT \"\" set ECHO off set WRAP off set VER off set FEED off set TERM off set SQLNUMBER OFF SELECT * FROM v\\\\\$version ; EOFTOTO` echo \"\$X\" >> rqt.txt"; open (FILE,"$shell |") or die "E/S : $!\n"; close FILE; open (FILE, "rqt.txt"); while (<FILE>){ next unless /Edition Release (.*) - /; $oraserv = $1; } close FILE; unlink "rqt.txt"; print $oraserv;