Im ersten Beispiel sehen wir uns an, wie eine Ergebnismenge zeilenweise als Array abgefragt werden kann:
#!/usr/bin/perl
use DBD::Pg;
my $dbh;
# datenbankverbindung aufbauen
$dbh = DBI->connect("dbi:Pg:dbname=test;host=localhost;port=5432",
"hs", "");
# sql ausführen
my $sth = $dbh->prepare("SELECT relname, relpages FROM pg_class LIMIT 2") or
die;
my $rv = $sth->execute() or die;
# zeilenanzahl ausgeben
print "zeilen: ".$sth->rows."\n\n";
# daten ausgeben
while (@row = $sth->fetchrow_array)
{
print "$row[0] - $row[1]\n";
}
Ziel ist es, die ersten beiden Datensätze in der Tabelle auszugeben. Beim DBI-Modul ist das Abfragen von Daten in der Regel ein zweistufiger Prozess: Bevor wir die Daten abholen können, müssen wir die Abfrage erst für die Ausführung vorbereiten. Diese Operation ist mit der Methode prepare durchzuführen. Ist die Abfrage erst einmal soweit, können wir den Code schließlich am Server ausführen. Zu diesem Zwecke rufen wir die Methode execute auf. Als Ergebnis erhalten wir die folgenden Zeilen:
[hs@hp tmp]$ ./test.pl zeilen: 2 views - 0 data_type_privileges - 0
Perl bietet auch die Möglichkeit, einzelne Zeilen in Form von Hashes zu extrahieren. Zu diesem Zwecke ist die Methode fetchrow_hashref zu verwenden. Der entsprechende Code sieht wie folgt aus:
# hashes verwenden
while ($row=$sth->fetchrow_hashref)
{
print "$row->{relname} - $row->{relpages}\n";
}
Der Output des Programmes unterscheidet sich nicht vom Output, den wir bereits gesehen haben. Der einzige Unterschied ist, dass wir in diesem Fall auf einen Hash zurückgreifen. Ob Sie lieber einen Hash oder eine Tabellennummer verwenden hängt ganz von Ihnen ab - auf das Ergebnis hat das keinen Einfluss.
http://www.postgresql.at