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 :
or je voudrais éviter la boucle while et renvoyer juste une liste, un hash ou une réf d'un tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
En gros je voudrais que mon code ressemble à ceci :
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) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Merci d'avance
Cordialement
Philobedo
Partager