Blog technique sur mes expériences de développeur.
6 août 2022
Je vous propose d’ores et déjà un petit exercice qui va nous permettre de réviser les notions vues au cours des chapitres précédents, mais qui va également nous permettre de voir de nouvelles fonctions qui pourront s’avérer utiles dans vos futurs programmes. ;)
Ce cours était originalement publié sur la plateforme OpenClassrooms. La plateforme OpenClassrooms ayant supprimée ce tutoriel en 2020 et le tutoriel étant sous licence CC BY-SA 4.0, je vous propose de le (re)découvrir ici.
Le but de ce TP est simple : faire un script Perl qui permette de simuler la commande SQL.
DESCRIBE VENTE;
Bien entendu, notre commande sera bien plus simplifiée et se contentera d’afficher :
NULL
ou non.Voici un aperçu de ce que devra faire votre script :
> perl describe_vente.pl
------------------------------------------------
| Champ | Type | Null |
------------------------------------------------
| numVoiture | integer | non |
| numVendeur | integer | non |
| prixReel | decimal | non |
| dateVente | date | non |
------------------------------------------------
Bien évidemment, vous n’avez pas à l’heure actuelle tous les outils pour pouvoir réaliser ce TP. C’est pourquoi je vais vous décrire quelques fonctions qui vous seront sans aucun doute indispensables pour mener à bien ce petit exercice.
Méthode spécifique à MySQL !
Cette méthode retourne une référence vers un tableau de noms de colonnes et s’utilise de la manière suivante :
$prep->{'NAME'};
Méthode spécifique à MySQL !
Cette méthode retourne une référence vers un tableau de types de colonnes. Les valeurs possibles sont :
Char
;Numeric
;Decimal
;Integer
;Smallint
;Float
;Real
;Double
;Date
;Time
;Timestamp
;Varchar
;Longvarchar
;Binary
;Varbinary
;Longvarbinary
;Bigint
;Tinyint
;Bit
;Wchar
;Wvarchar
;Wlongvarchar
.Elle s’utilise de la manière suivante :
$prep->{'TYPE'};
Cette méthode retourne une référence vers un tableau de valeurs qui indiquent si les colonnes peuvent être NULL
ou non. Les valeurs possibles sont :
une chaine vide si la colonne ne peut pas être NULL
;
Elle s’utilise de la manière suivante :
$prep->{'NULLABLE'};
Si vous pensez avoir besoin d’une séance de révision quant aux références en Perl, vous pouvez consulter cette annexe.
Je vous fais part de ma solution. Bien évidemment, il ne s’agit pas de LA solution !
#!/usr/bin/perl
use strict;
use Switch;
use DBI;
#On prépare la connexion
my $base = 'Zvoitures';
my $hote = '127.0.0.1';
my $login = 'root';
my $mdp = '';
#On se connecte
my $dbd = DBI->connect("dbi:mysql:dbname=$base;host=$hote;",$login, $mdp)
or die 'Connexion impossible à la base de données : '.DBI::errstr;
#On prépare la requête et on l'exécute
my $requete = 'SELECT * FROM VENTE';
my $prep = $dbd->prepare($requete)
or die 'Impossible de préparer la requête : '.$dbd->errstr;
$prep->execute
or die 'Impossible d\'exécuter la requête : '.$prep->errstr;
#On récupère les noms des colonnes
my $name = $prep->{'NAME'};
#On récupère les types des colonnes
my $type = $prep->{'TYPE'};
#On regarde si c'est null ou pas
my $null = $prep->{'NULLABLE'};
#On initialise le compteur
my $i = 0;
#On affiche l'en-tête du tableau
print "-----------------------------------------------------------------\n";
print "|\tChamp\t\t|\tType\t\t|\tNull\t|\n";
print "-----------------------------------------------------------------\n";
foreach my $elt (@$name) {
#On affiche les noms
print "|\t" . $$name[$i] . "\t|\t";
#OU
#print "|\t" . $elt . "\t|\t";
#On affiche les types
switch ($$type[$i]) {
case 1 { print 'char' }
case 2 { print 'numeric' }
case 3 { print 'decimal' }
case 4 { print 'integer' }
case 5 { print 'smallint' }
#...
case -10 { print 'Wlongvarchar' }
}
print "\t\t|\t";
#On affiche si c'est NULL ou pas
if($$null[$i] == 1) {
print 'oui';
}
else {
print 'non';
}
print "\t|\n";
$i++;
}
#Fin de tableau
print "-----------------------------------------------------------------\n";
#On libère la mémoire et on se déconnecte
$prep->finish;
$dbd->disconnect;
Si vous avez des problèmes, des doutes ou des questions, je vous encourage fortement à les poser sur le forum de ce site !
Pour améliorer ce petit programme, vous pouvez par exemple :
Certaines de ces fonctions sont complètement obsolètes et ne vous donneront rien d’exploitable !
La pause est finie, il est temps de reprendre le cours normal du tuto ! ^^