Teilen über


FOR-Anweisung

Gilt für:mit Häkchen markiert: ja Databricks SQL mit Häkchen markiert: ja 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

  • Etikett

    Ein optionales Label für die Schleife, das unter allen Labels für Anweisungen, in denen die FOR Anweisung 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 die variable_name, nicht die label.

  • variable_name

    Ein optionaler Name, den Sie als Qualifizierer verwenden können, wenn Sie auf die Spalten im Cursor verweisen.

  • stmt

    Eine 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