Erläuterungen zu Blöcken in Snowflake Scripting¶
In Snowflake Scripting schreiben Sie prozeduralen Code in einem Snowflake Scripting-Block. Unter diesem Thema wird erklärt, wie Sie prozeduralen Code in einem Block schreiben.
Erläuterungen zur Struktur eines Blocks¶
Ein Block hat die folgende Grundstruktur:
Ein Block besteht aus erforderlichen und optionalen Abschnitten, die durch Schlüsselwörter abgegrenzt sind. Jeder Abschnitt dient einem anderen Zweck:
DECLARE: Wenn Sie im Block Variablen, Cursors, RESULTSETs oder Ausnahmen verwenden müssen, können Sie diese entweder im Abschnitt DECLARE des Blocks oder im Abschnitt BEGIN … END des Blocks deklarieren.
Sie können Folgendes deklarieren:
Dieser Abschnitt des Blocks ist optional.
BEGIN … END: Schreiben Sie in den Abschnitt des Blocks zwischen BEGIN und END die SQL-Anweisungen und die Snowflake Scripting-Konstrukte.
EXCEPTION: Wenn Sie Code zur Behandlung von Ausnahmen hinzufügen müssen, fügen Sie diesen in den Abschnitt EXCEPTION des Blocks ein.
Dieser Abschnitt des Blocks ist optional.
Ein einfacher Block benötigt nur die Schlüsselwörter BEGIN und END. Beispiel:
Wichtig
Das Schlüsselwort BEGIN, mit dem ein Block gestartet wird, unterscheidet sich von dem Schlüsselwort BEGIN, mit dem eine Transaktion gestartet wird. Um Verwirrung zu vermeiden, empfiehlt Snowflake dringend, Transaktionen mit BEGIN TRANSACTION (oder der älteren Form BEGIN WORK) zu beginnen und nicht mit BEGIN.
Alle Datenbankobjekte, die Sie in einem Block erstellen (z. B. die Tabellen im obigen Beispiel), können außerhalb des Blocks verwendet werden.
Wenn der Code Variablen verwendet, können Sie diese Variablen im Block deklarieren. Eine Möglichkeit, dies zu tun, ist im DECLARE-Abschnitt des Blocks. Beispiel:
In diesem Beispiel wird eine Variable deklariert, diese Variable verwendet und der Wert dieser Variablen zurückgegeben. Weitere Informationen dazu, wie Werte aus einem Block zurückgegeben werden, finden Sie unter Zurückgeben eines Wertes.
Diese Variablen nicht außerhalb des Blocks verwendet werden können. Siehe Erläuterungen zur Sichtbarkeit von Deklarationen.
Sie können auch eine Variable im Abschnitt BEGIN … END des Blocks deklarieren, indem Sie LET verwenden. Weitere Details dazu finden Sie unter Deklarieren einer Variablen.
Verwenden eines Blocks in einer gespeicherten Prozedur¶
Sie können einen Block in der Definition einer gespeicherten Prozedur verwenden. Im Folgenden finden Sie ein Beispiel, das Sie in Snowsight ausführen können. Dabei wird eine gespeicherte Prozedur erstellt, die einen Snowflake Scripting-Block enthält:
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
Sie können eine gespeicherte Prozedur mit dem CALL-Befehl aufrufen. Im folgenden Beispiel wird die gespeicherte Prozedur area im vorherigen Beispiel aufgerufen:
Die gespeicherte Prozedur gibt die folgende Ausgabe zurück:
Weitere Informationen dazu finden Sie unter Schreiben von gespeicherten Prozeduren in Snowflake Scripting.
Verwenden eines Blocks in einer benutzerdefinierten Funktion (UDF)¶
Sie können einen Block in der Definition einer Snowflake-Scripting-UDF verwenden. Das folgende Beispiel zeigt Code, den Sie in Snowsight ausführen können, um eine UDF zu erstellen, die einen Snowflake Scripting-Block enthält:
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
Sie können die Funktion in einer SQL-Anweisung aufrufen, z. B. in einer SELECT- oder INSERT-Anweisung. Das folgende Beispiel ruft die Snowflake-Scripting-UDF area aus dem vorherigen Beispiel in einer SELECT-Anweisung auf:
Weitere Informationen dazu finden Sie unter Snowflake Scripting-UDFs.
Verwenden eines anonymen Blocks¶
Wenn Sie prozeduralen Code außerhalb einer gespeicherten Prozedur oder UDF ausführen möchten, können Sie einen anonymen Block definieren und verwenden. Ein anonymer Block ist ein Block, der nicht Teil einer gespeicherten Prozedur oder UDF ist. Sie definieren den Block als eine separate, eigenständige SQL-Anweisung.
Mit der Anweisung BEGIN wird der Block sowohl definiert als auch ausgeführt. (Die Ausführung des Blocks erfolgt nicht mit einem separaten CALL-Befehl.)
Im Folgenden finden Sie ein Beispiel für einen anonymen Block, den Sie in Snowsight ausführen können:
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
Das Beispiel ergibt die folgende Ausgabe:
Die Spaltenüberschrift in der Ausgabe lautet anonymous block. Wäre der Code in einer gespeicherten Prozedur ausgeführt worden, wäre die Spaltenüberschrift der Name der gespeicherten Prozedur gewesen.
Im folgenden Beispiel wird ein anonymer Block definiert, der zwei Tabellen erstellt, die miteinander in Beziehung stehen. In diesem Beispiel benötigt der Block mit dem prozeduralen Code keine Variablen, daher wird der Abschnitt DECLARE des Blocks weggelassen.
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):