Perl DBI dynamique fetchrow tandis que les boucles
Je suis en train de passer les noms de table pour un sous qui obtient tous les noms de champ de la table, les stocke dans un tableau, puis utilise ce tableau en collaboration avec le fetchrow d'une autre requête sql pour afficher les données dans ces champs. Voici le code que j'ai maintenant:
Exemples de sous appels avec les noms de table en tant que paramètre:
shamoo("reqhead_rec");
shamoo("approv_rec");
shamoo("denial_rec");
shamoo sous:
sub shamoo
{
my $table = shift;
print uc($table)."\n=====================================\n";
#takes arg (table name) and stores all the field names into an array
$STMT = <<EOF;
select first 1 * from $table
EOF
my $sth = $db1->prepare($STMT);$sth->execute;
my ($i, @field);
my $columns = $sth->{NAME_lc};
while (my $row = $sth->fetch){for $i (0 .. $#$row){$field[$i] = $columns->[$i];}}
$STMT = <<EOF;
select * from $table where frm = '$frm' and req_no = $req_no
EOF
$sth = $db1->prepare($STMT);$sth->execute;
$i=0;
while ($i!=scalar(@field))
{
#need code for in here...
}
}
Je suis à la recherche d'un moyen de transformer ce n'est pas quelque chose qui n'a pas à être explicitement défini....
my ($frm, $req_no, $auth_id, $alt_auth_id, $id_acct, $seq_no, $id, $appr_stat, $add_date, $approve_date, $approve_time, $prim);
while(($frm, $req_no, $auth_id, $alt_auth_id, $id_acct, $seq_no, $id, $appr_stat, $add_date, $approve_date, $approve_time, $prim) = $sth->fetchrow_array())
OriginalL'auteur CheeseConQueso | 2009-05-15
Vous devez vous connecter pour publier un commentaire.
Utilisation fetchrow_hashref:
Vous pouvez également définir
FetchHashKeyName
à"NAME_lc"
ou"NAME_uc"
lorsque vous créez votre base de données de la poignée:L'impression dans la pour devrait être: "print" \t$col $row->{ $col }\n";
Oups, qu'est ce que je reçois pour ne pas tester.
Pourrait être utile de mentionner à définir FetchHashKeyName lors de l'appel de DBI->se connecter à aplanir les problèmes avec peut-être-de la casse, majuscules/minuscules, les noms de colonnes utilisé comme sensible à la casse clés de hachage. Ainsi, par exemple, j'ai toujours connecter en précisant FetchHashKeyName => 'NAME_lc", de sorte que les clés de hachage représentant les noms de colonne sont garantis d'être moins le cas, même si la DB retourne en Camelcase.
J'étais en ajoutant que pendant que vous étiez en laissant le commentaire.
OriginalL'auteur Chas. Owens
Je me demande si cette méthode pourrait fonctionner pour une table vide.
La méthode la plus sûre pour obtenir les métadonnées de la colonne est de ne pas regarder les touches de retour de la hashref (qui peuvent ne pas exister), mais plutôt les règles du jeu et l'utilisation DBI fourni des attributs de $sth lui-même:
Voir les Métadonnées, section de l'DBI page de manuel pour plus de détails.
OriginalL'auteur Ya. Perelman