Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Gilt für:
Databricks SQL
Databricks Runtime 16.3 und höher
Wiederholen Sie die Ausführung einer Liste von Anweisungen für jede Zeile, die von der Abfrage zurückgegeben wird.
Diese Anweisung kann nur in einer zusammengesetzten Anweisung verwendet werden.
Syntax
[ label : ] FOR [ variable_name AS ] query
DO
{ stmt ; } [...]
END FOR [ label ]
Die Parameter
-
Ein optionales Label für die Schleife, das unter allen Labels für Anweisungen, in denen die
FORAnweisung enthalten ist, eindeutig ist. Wenn eine Endbeschriftung angegeben wird, muss sie mit der Anfangsbeschriftung übereinstimmen. Die Bezeichnung kann für LEAVE- oder ITERATE-Vorgänge in der Schleife verwendet werden. Um Schleifenspaltenverweise zu qualifizieren, verwenden Sie dievariable_name, nicht dielabel. -
Ein optionaler Name, den Sie als Qualifizierer verwenden können, wenn Sie auf die Spalten im Cursor verweisen.
stmtEine SQL-Anweisung
Hinweise
Wenn die Abfrage mit einer Tabelle ausgeführt wird, die auch im Text der Schleife geändert wird, hängt die Semantik von der Datenquelle ab.
Bei Delta-Tabellen bleibt die Abfrage davon unberührt.
Databricks garantiert nicht die vollständige Ausführung der Abfrage, wenn die FOR Schleife aufgrund einer LEAVE Anweisung oder einer Fehlerbedingung vorzeitig abgeschlossen wird.
Wenn während der Ausführung der Abfrage Ausnahmen oder Nebeneffekte auftreten, garantiert Databricks nicht, zu welchem Zeitpunkt innerhalb der Schleife diese auftreten.
Häufig FOR können Schleifen durch relationale Abfragen ersetzt werden, die in der Regel effizienter sind.
Beispiele
-- sum up all odd numbers from 1 through 10
> BEGIN
DECLARE sum INT DEFAULT 0;
sumNumbers: FOR row AS SELECT num FROM range(1, 20) AS t(num) DO
IF num > 10 THEN
LEAVE sumNumbers;
ELSEIF num % 2 = 0 THEN
ITERATE sumNumbers;
END IF;
SET sum = sum + row.num;
END FOR sumNumbers;
VALUES (sum);
END;
25
-- Compare with the much more efficient relational computation:
> SELECT sum(num) FROM range(1, 10) AS t(num) WHERE num % 2 = 1;
25