Ergebnishash und Ausgabefilter |
get "meinedb"; for(my $i=0; $i<$_amount; $i++) { out $meinedb{Feldname}[$i]," "; }
Gibt man einen Ergebnisnamen an, so wird dieser als Hashname verwendet:
get "Name~=a", "meinedb", "ergebnis1"; get "Name~=b", "meinedb", "ergebnis2"; for(my $i=0; $i<$ergebnis1{_amount}; $i++) { out $ergebnis1{Feldname}[$i]," "; } for(my $i=0; $i<$ergebnis2{_amount}; $i++) { out $ergebnis2{Feldname}[$i]," "; }
Zur (Test-)Ausgabe des Ergebnis-Hashs eignet sich der Befehl dump:
get "meinedb"; out dump %meinedb;
Holt die Datenbank "meinedb" und gibt deren Inhalt vollständig aus.
Innerhalb eigenen Codes werden Einträge die aus einer Datenbank gelesen wurden, nicht durch den Ausgabefilter gewandelt, liegen also immer "roh" vor, so wie sie in der Datenbank stehen. So enthält z.B. ein Datumsfeld den Wert im internen Format, der erst mit datum in ein "schönes" Ausgabeformat gewandelt werden muss. Beim <do action=all.. oder <loop>..</loop> wird dies automatisch erledigt, so wie es in der Felddefinition angegeben wurde.
Möchte man dies auch bei get-Befehlen erreichen, muss man ein Plus + nach dem Datenbank-Namen angeben:
get "Datum>jetzt", "datenbank", "+"; out $Datum;
Gibt $Datum im Ausgabeformat der Felddefinition aus, z.B. 2.September.2006
Das interne Format liegt zusätzlich im Hash %_raw vor, in diesem Fall also in $_raw{Datum}.
Auch bei Verwendung des + kann ein Ergebnishash verwendet werden, was aber zusätzlich zu einem leicht anderen Verhalten führt:
Um den Ausgabefilter zu aktivieren, muss man das + direkt vor den Ergebnishash schreiben:
get "Name==hans", "datenbank", "+erg"; out $erg{Datum}[0];
Dies führt dazu, dass nicht mehr automatisch Variablen mit Feldnamen gesetzt werden ($Datum ist also leer). Das Abfrageergebnis liegt nur im Hash erg vor - durch den Ausgabefilter gewandelt. Die "Rohdaten" sind ebenfalls vorhanden und stehen in $erg{_raw}{Feldname}[Zeile], in diesem Beispiel also in $erg{_raw}Datum[0].
Der Vorteil hierbei ist, dass so unerwünschtes Überschreiben von Variablen vermieden wird.
Möchte man keine Feldvariablen setzen, ohne den Ausgabefilter zu aktivieren, benötigt man ein Minus -:
get "Name==hans", "datenbank", "-"; out $datenbank{Datum}[0];
Das Ergebnis steht dann im Datenbank-Hash. Natürlich funktioniert dies auch in Verbindung mit einem Ergebnis-Hash:
get "Name==hans", "datenbank", "-erg"; out $erg{Datum}[0];
Gibt das interne Format von Datum aus.
Um das Ergebnis später doch in Feldvariablen abzurufen, benutzt man einfach get_next:
get_next "erg"; out $Datum;
Alle Abfragemöglichkeiten in einer Übersicht:
Abfrage | Auswirkung |
---|---|
get "db"; | Kein Ausgabefilter, Feldvariablen werden gesetzt, Ergebnis in %db |
get "db", "erg"; | Kein Ausgabefilter, Feldvariablen werden gesetzt, Ergebnis in %erg |
get "db", "+"; | Ausgabefilter aktiv, Feldvariablen werden gesetzt, Ergebnis in %db |
get "db", "-"; | Kein Ausgabefilter, Keine Feldvariablen, Ergebnis in %db |
get "db", "+erg"; | Ausgabefilter aktiv, Keine Feldvariablen, Ergebnis in %erg |
get "db", "-erg"; | Kein Ausgabefilter, Keine Feldvariablen, Ergebnis in %erg |