INTO
SELECT
-Ausgabe an Variablen übergeben
PSQL
In PSQL wird die INTO
-Klausel ganz am Ende der SELECT
-Anweisung platziert.
SELECT [...] <column-list> FROM ... [...] [INTO <variable-list>] <variable-list> ::= [:]psqlvar [, [:]psqlvar ...]
Note
|
Der Doppelpunkt-Präfix vor lokalen Variablennamen in PSQL ist in der |
In PSQL-Code (Trigger, Stored Procedures und ausführbare Blöcke) können die Ergebnisse einer SELECT-Anweisung zeilenweise in lokale Variablen geladen werden.Dies ist oft die einzige Möglichkeit, überhaupt etwas mit den zurückgegebenen Werten zu tun, es sei denn, es wird ein expliziter oder impliziter Cursorname angegeben.Anzahl, Reihenfolge und Typen der Variablen müssen mit den Spalten in der Ausgabezeile übereinstimmen.
Eine “plain” SELECT
-Anweisung kann in PSQL nur verwendet werden, wenn sie höchstens eine Zeile zurückgibt, d.h. wenn es sich um eine singleton select handelt.Für mehrzeilige Selects bietet PSQL das Schleifenkonstrukt FOR SELECT
, das später im PSQL-Kapitel besprochen wird.PSQL unterstützt auch die DECLARE CURSOR
-Anweisung, die einen benannten Cursor an eine SELECT
-Anweisung bindet.Der Cursor kann dann verwendet werden, um die Ergebnismenge zu durchlaufen.
Beispiele
-
Auswahl einiger aggregierter Werte und Übergabe an die zuvor deklarierten Variablen
min_amt
,avg_amt
undmax_amt
:select min(amount), avg(cast(amount as float)), max(amount) from orders where artno = 372218 into min_amt, avg_amt, max_amt;
NoteDer
CAST
dient dazu, den Durchschnitt zu einer reellen Zahl zu machen;andernfalls, daBetrag
vermutlich ein ganzzahliges Feld ist, würden SQL-Regeln es auf die nächste niedrigere ganze Zahl kürzen. -
Ein PSQL-Trigger, der zwei Werte als 'BLOB'-Feld abruft (unter Verwendung der 'LIST()'-Funktion) und ihm 'INTO' ein drittes Feld zuweist:
select list(name, ', ') from persons p where p.id in (new.father, new.mother) into new.parentnames;