Menu Content/Inhalt
Home arrow PostgreSQL arrow Positionsparameter
Positionsparameter PDF Drucken E-Mail

Positionsparameter

Positionsparameter werden in der Definition von SQL-Funktionen und in vorbereiteten Anfragen verwendet und stehen für einen später einzusetzenden Wert. Die Form eines Parameterverweises ist:

$zahl

Hier ist ein Bespiel für die Verwendung eines Positionsparameters in einer SQL-Funktion:

CREATE FUNCTION abteilung(text) RETURNS abteilung AS 'SELECT * FROM abteilung WHERE naem = $1' LANGUAGE SQL;

Wenn die Funktion aufgerufen wird, wird $1 hier durch das erste Funktionsargument ersetzt (das sollten wir ja eigentlich nach dem shellprogrammieren schon können).

Aggregatausdrücke

Ein Aggregatausdruck steht für die Anwendung einer Aggregatfunktion über eine Menge von Zeilen, die von einer Anfrage ausgewählt wurden.

Eine Aggregatfunktion reduziert mehrere Eingabewerte auf einen einzelnen Wet, wie zum Beispiel die Summe oder den Durchschnitt der Werte.

Die Syntax eines Aggregatausdrucks ist einer der folgenden:

aggregat_name (ausdruck) aggregat_name (ALL ausdruck) aggregat_name (DISTINCT ausdruck) aggregat_name ( * )

wo aggregat_name eine vorab definierte Aggregatfunktion (möglicherweise mit Schemaname) ist und Ausdruck ein beliebiger Ausdruck, der nicht selbst einen Aggregatausdruck enthält.

Die erste und die zweite Form führt die Aggregatfunktion für alle Eingabezeilen aus, für die der angegebene Ausdruck keinen NULL-Wert ergibt. (Tatsächlich entscheidet die Aggregatfunktion, ob sie NULL-Werte ignoriere will, aber alle eingebauten verhalten sich so.) Die dritte Form führt die Aggregatfunktion für alle unterschiedlichen Nicht-NULL-Werte aus, die sich aus dem Ausdruck für die Eingabezeilen ergeben. Die letzte Form führt die Aggregatfunktion einmal für jede Eingabezeile aus, unabhängig davon, ob der Wert NULL ist oder nicht. Da kein bestimmter Eingabewert angegeben wird, ist diese Form nur für die Aggregatfunktion count() nützlich.

Ein Beispiel:
count(*)
ergibt die Gesamtzahl der Eingabezeilen;
count(f1)
ergibt die Gesamtzahl der Eingabezeilen, wo f1 nicht NULL ist;
count(distinct f1)
ergibt die Gesamtzahl der unterschiedlichen Werte von f1, die nicht NULL sind.
Andere Aggregatfunktionen können von Benutzern hinzugefügt werden.
Aggregatausdrücke dürfen nur in der Ergebnisliste oder der HAVING-Klausel eines SELECT-BEfehls verwendet werden. In anderen Klauseln, z.B. WHERE, sind sie verboten, weil diese Klauseln logisch vor der Auswertung der Aggregatausdrücke angewendet werden.

Typumwandlungen

PostgreSQL akzeptiert zwei gleichbedeutende Syntaxen für Typumwandlungen:

CAST ( ausdruck AS typ )

ausdruck: :typ

Die Syntax mit CAST stammt aus dem SQL-Standard; die Syntax mit :: ist die historische PostgreSQL-Variante.
Wenn eine Typumwandlung auf einen Ausdruck mit bekannten Typ angewendet wird, dann ist das eine Laufzeitumwandlung. Die Umwandlung ist nur dann erfolgreich, wenn eine passende Umwandlungsoperation definiert ist. Dieser Vorgang unterscheidet sich etwas von der Tyumwandlung mit Konstanten. Eine Typumwandlung, die auf eine einfache Zeichenkettenkonstante angewendet wird, ist die anfängliche Zuweisung eines Typs für die Konstante und ist mit jedem Typ erfolgreich (wenn der Inhalt der Zeichenkette gültige Syntax für den Datentyp ist).

Eine ausdrückliche Typumwandlung kann oft ausgelassen werden, wenn keine Zweideutigkeit über den Typ besteht, den der Ausdruck produzieren muss (wenn er zum Beispiel einer Tabellenspalte zugewiesen wird); in solchen Fällen wendet das System eine Umwandlung automatisch an. Diese automatischen Umwandlung wird allerdings nur für Typenpaare angewendet, die im Systemkatalog zur "automatichen Typumwandlung" freigegeben sind. Andere Umwandlungen müssen mit der ausdrücklichen Umwandlungssyntax durchgeführt werden. Diese Einschränkung besteht, damit Überraschende Umwandlungen nicht ohne Benachrichtigung ausgefürht werden.

Skalare Unteranfragen

Eine skalare Unteranfrage ist eine normale SELECT-Anfrage in Klammern, die genau eine Zeile mit einer Spalte ergibt.
Der SELECT-Befehl wird ausgeführt und der Ergebniswert wird in dem übergeordneten Ausdruck verwendet wird, aber mehr als eine Zeile oder eine Spalte ergibt. Wenn in einem bestimmten Aufruf die Unteranfrage gar keine Zeilen ergibt, dann ist das kein Fehler; das Ergebnis ist dann der NULL-Wert. Die Unteranfrage kann sich auf Variablen in der äusseren Anfrage beziehen, die sich dann bei jeder einzelnen Auswertung der Unteranfrage als Konstanten verhalten.

Das folgende Beispiel findet die Stadt mit der grössten Einwohnerzahl in jedem Land:

SELECT name, ( SELECT max(einwohner) FROM staedte WHERE staedte.land = laender.name ) FROM laender ;

 
< Zurück   Weiter >

Scroll-news

Mailingliste:
http://mlists.in-berlin.de/mailman/listinfo/lieo-mlists.in-berlin.de 

 

Das Forum ist online gegangen

 


Who's Online

Aktuell 48 Gäste online

Google AdSense