Perl est, avec SQL, de loin mon langage préféré pour écrire des scripts à utiliser avec Oracle. Voici ci-dessous quelques notes utiles pour construire et exécuter des scripts Perl avec une base de données :
Configurer l’environnement pour utiliser Perl (la version incluse dans 10g sous linux)
A- Il faut modifier la variable PATH pour y inclure le programme Perl (pas celui inclus dans /usr/bin/perl).
$ export PATH=$ORACLE_HOME/perl/bin:$PATH
B- Ensuite, il faut mettre à jour la variable PERL5LIB pour pointer vers les modules Perl que vous voulez utiliser avec vos programmes.
$ export PERL5LIB=$ORACLE_HOME/perl/lib/perl/lib/5.8.3
Menu dynamique
Il existe un module Perl qui permet de construire très simplement des menus dynamiques (pour en savoir plus cliquez ici). C’est très pratique pour permettre la sélection entre plusieurs lignes d’une requête SQL ! Voici ci-dessous comment l’utiliser :
A- Ajoutez le fichier Menu.pm dans le répertoire $ORACLE_HOME/perl/lib/perl/lib/5.8.3/Term
B- Ecrire un programme Perl qui a les caractéristiques suivantes :
- inclure le module Perl Term::Menu comme ceci :
- use Term::Menu;
- Créer un tableau hash comme ceci :
- my %hash = ();
- %hash = ( « 7ab3ba » => [« Select /* DEMO 1 */ ‘Gark’ from dual », ‘1’],
« e3b1b1 » => [« Select /* DEMO 2 */ ‘Gark’ from dual », ‘2’],
« 6avvc2 » => [« Select /* DEMO 3 */ ‘Gark’ from dual », ‘3’],
« 15ffad2 » => [« Select /* DEMO 4 */ ‘Gark’ from dual », ‘4’],); - Créer le menu ainsi qu’une variable résult qui contiendra le résultat. Vous pouvez changer les différents libellés du menu :
- my $menu = new Term::Menu( beforetext => « Selectionnez un des menus ci-dessous : », aftertext => « Saississez votre choix : »,);
- my $result = $prompt->menu(%hash);
- Afficher la valeur de la ligne sélectionnée :
- print « Le SQL_ID selectionne est le $resultn »;
- Attendez 2 secondes et effacez l’écran
- sleep 2;
- system(($^O eq ‘MSWin32’) ? ‘cls’ : ‘clear’);
Et voilà, le texte complet du script Perl est donc le suivant :
use Term::Menu;
system(($^O eq ‘MSWin32’) ? ‘cls’ : ‘clear’);
my %hash = ();
my $menu = new Term::Menu( beforetext => « Selectionnez un des menus ci-dessous : »,
aftertext => « Saississez votre choix : »,);
my $result = « 1 »;
while ( $result ne « q » ) {
%hash = ( « 7ab3ba » => [« Select /* DEMO 1 */ ‘Gark’ from dual », ‘1’],
« e3b1b1 » => [« Select /* DEMO 2 */ ‘Gark’ from dual », ‘2’],
« 6avvc2 » => [« Select /* DEMO 3 */ ‘Gark’ from dual », ‘3’],
« 15ffad2 » => [« Select /* DEMO 4 */ ‘Gark’ from dual », ‘4’],
« q » => [« Quitter », ‘q’],);
$result = $menu->menu(%hash);
print « Le SQL_ID selectionne est le $resultn »;
sleep 2;
system(($^O eq ‘MSWin32’) ? ‘cls’ : ‘clear’);
}
Exécuter des ordres SQL avec Perl DBI
Le module DBI permet d’exécuter des ordres SQL directement dans Perl, sans passer par SQL*Plus. Ci-dessous, nous allons montrer un exemple d’utilisation de ce module (L’avantange d’utiliser la version Perl de la base de données est que ce module est installé.
A- Pour exécuter du DBI, il faut d’abord positionner les variables d’environnement convenablement, comme ceci :
- export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
- export LD_LIBRARY_PATH=$ORACLE_HOME/lib
- export PERL5LIB=$ORACLE_HOME/perl/lib/5.8.3:$ORACLE_HOME/perl/lib/site_perl/5.8.3/i686-linux-thread-multi
- export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/perl/bin:$PATH
B- Créez un script gark.pl qui requête la base de données
use strict;
use DBI;
my $dbh = DBI->connect( ‘dbi:Oracle:ORCL’, ‘scott’, ‘tiger’,
) || die « Database connection not made: $DBI::errstr »;
my $sql = qq{ SELECT empno, ename FROM emp };
my $sth = $dbh->prepare( $sql );
$sth->execute();
my( $empno, $ename );
$sth->bind_columns( undef, $empno, $ename );
while( $sth->fetch() ) {
print « $empno, $enamen »;
}
$sth->finish();
$dbh->disconnect();
Remarques :
L’alias TNS pour se connecter à ma base de données est ORCL
L’utilisateur et le mot de passe de la base de données sont scott et tiger
C- Exécutez le script ce-dessus en lançant la commande :
$ perl gark.pl
7369, SMITH
7499, ALLEN
7521, WARD
7566, JONES
7654, MARTIN
7698, BLAKE
7782, CLARK
7788, SCOTT
7839, KING
7844, TURNER
7876, ADAMS
7900, JAMES
7902, FORD
7934, MILLER
Pour en savoir plus sur l’utilisation du SQL avec Oracle, voici quelques liens utiles :
GarK!