De la SQL :: Déclaration :: documentation Fonctions:DBD :: CSV: Problème avec les fonctions définis par l'utilisateur
Création de fonctions définies par l'utilisateur
...
fonctions plus complexes peuvent utiliser un certain nombre des arguments toujours passés aux fonctions automatiquement. Les fonctions reçoivent toujours ces valeurs dans @_:
sub FOO {my ($ self, $ sth, $ rowhash, @params); }
#!/usr/bin/env perl
use 5.012;
use warnings; use strict;
use DBI;
my $dbh = DBI->connect("DBI:CSV:", undef, undef, { RaiseError => 1, });
my $table = 'wages';
my $array_ref = [ [ 'id', 'number' ],
[ 0, 6900 ],
[ 1, 3200 ],
[ 2, 1800 ], ];
$dbh->do("CREATE TEMP TABLE $table AS import(?)", {}, $array_ref);
sub routine {
my $self = shift;
my $sth = shift;
my $rowhash = shift; #
return $_[0]/30;
};
$dbh->do("CREATE FUNCTION routine");
my $sth = $dbh->prepare("SELECT id, routine(number) AS result FROM $table");
$sth->execute();
$sth->dump_results();
Lorsque je tente ce je reçois un message d'erreur:
DBD :: CSV :: st execute a échoué: utilisation de la valeur non initialisée $ _ [0] dans la division (/) à la ligne de 27. ./so.pl
[pour déclaration "SELECT id, routine (nombre) AS résultent de "salaires""] à la ligne ./so.pl 34.
Quand je en commentaire le troisième argument que je travaille comme prévu (parce qu'il semble comme si le troisième argument est absent):
#!/usr/bin/env perl
...
sub routine {
my $self = shift;
my $sth = shift;
#my $rowhash = shift;
return $_[0]/30;
};
...
0, 230
1, 106,667
2, 60
3 rangées
Est-ce un bug?
Vous pouvez également essayer tel quel, sans utiliser rowhash de $, mais que sems comme s'appuyer sur sans-papiers et susceptibles de changer de comportement. Le bug n'est pas que votre fonction ne fonctionne pas correctement, c'est que cela fonctionne du tout, en fonction de la documentation. – MkV
Si mon interprétation de cette partie du document est correcte, il en va de même pour la fonction intégrée - c'est dommage. –