[DBD:Oracle] Récupération de données après un execute() ?
Bonjour à tous,
J'ai créer un package perl dans lequel j'ai mes fonctions Oracle (connexion, déconnexion, lecture d'un enregistrement n, lecture de n à m, création, insertion, lecture de tous les enregistrements...).
Dans le cas de la fonction qui lit tous les enregistrements d'une table à partir d'un select passé en paramètre, je voulais savoir comment je peux renvoyer tous les enregistrements, soit dans une liste, un hash ou encore par référence directement ??
En fait je voudrais éviter d'avoir à faire une boucle (for, while) dans ma fonction mais plutot dans mon programme principal (pour gain de temps).
Voici actuellement ce que je fais :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| sub select {
my ($sql,$instanceOracle)=@_;
my @values;
my $sth=$instanceOracle->prepare_cached($sql)
or die "Unable to prepare the request: " . $instanceOracle->errstr;
$sth->execute()
or die "Unable to execute the request: " . $sth->errstr;
my $j=0;
while ( my @data = $sth->fetchrow_array() ) {
for (my $i=0; $i <=$#data; $i++) {
if (defined($data[$i])) {
$values[$j][$i]=$data[$i];
}
else {$values[$j][$i]="NULL";}
}
$j++;
}
$sth->finish;
return @values;
} |
or je voudrais éviter la boucle while et renvoyer juste une liste, un hash ou une réf d'un tableau.
En gros je voudrais que mon code ressemble à ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| sub select {
my ($sql,$instanceOracle)=@_;
my @values;
my $sth=$instanceOracle->prepare_cached($sql)
or die "Unable to prepare the request: " . $instanceOracle->errstr;
$sth->execute()
or die "Unable to execute the request: " . $sth->errstr;
my $data = $sth->fonction_adéquate!();
#ou:
my @data = $sth->fonction_adéquate!();
#ou:
my %data = $sth->fonction_adéquate!();
#ou:
$sth->finish;
return $data;
#ou:
return @data;
#ou:
return %data;
} |
J'ai cherché dans la doc CPAN, je n'ai rien trouvé qui pourrait m'aider (même en utilisant les curseurs), y a t-il un moyen d'y parvenir (ça peut être aussi un autre module que DBD:Oracle) ?
Merci d'avance
Cordialement
Philobedo