Verwenden von Snowflake Scripting in SnowSQL und über die klassische Weboberfläche¶
Unter diesem Thema wird erläutert, wie Sie die Snowflake Scripting-Beispiele in SnowSQL und über die klassische Weboberfläche ausführen.
Bemerkung
Wenn Sie andere Clients und Schnittstellen verwenden (z. B. Snowsight oder den JDBC-Treiber), können Sie dieses Thema überspringen und mit dem nächsten Abschnitt über Snowflake Scripting-Blöcke fortfahren.
Unter diesem Thema:
Einführung¶
Derzeit werden Snowflake Scripting-Blöcke von SnowSQL und der klassischen Weboberfläche noch nicht korrekt analysiert (Parsing). Die Eingabe und Ausführung eines Snowflake Scripting-Blocks kann zu folgendem Fehler führen:
SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
Um dies zu umgehen, müssen Sie bei Verwendung von SnowSQL oder der klassischen Weboberfläche den Anfang und das Ende eines Snowflake Scripting-Blocks mit Trennzeichen versehen.
In den folgenden Abschnitten wird erläutert, wie Sie dies tun können:
Verwenden von Zeichenfolgenkonstanten als Begrenzungszeichen um einen Block in einer gespeicherten Prozedur¶
Wenn Sie eine gespeicherte Prozedur in SnowSQL oder über die klassische Weboberfläche erstellen, schließen Sie den Snowflake Scripting-Block in einfache Anführungszeichen oder doppelte Dollarzeichen ein. Beispiel:
CREATE OR REPLACE PROCEDURE myprocedure()
RETURNS VARCHAR
LANGUAGE SQL
AS
$$
-- Snowflake Scripting code
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
Übergeben eines Blocks als Zeichenfolgenliteral an EXECUTE IMMEDIATE¶
Wenn Sie einen anonymen Block schreiben, übergeben Sie den Block als Zeichenfolgenliteral an den Befehl EXECUTE IMMEDIATE. Zur Abgrenzung des Zeichenfolgenliterals verwenden Sie einfache Anführungszeichen oder doppelte Dollarzeichen.
Beispiel:
EXECUTE IMMEDIATE $$
-- Snowflake Scripting code
DECLARE
radius_of_circle FLOAT;
area_of_circle FLOAT;
BEGIN
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
RETURN area_of_circle;
END;
$$
;
Alternativ können Sie eine Sitzungsvariable definieren, die ein Zeichenfolgenliteral ist, das den Block enthält, und diese Sitzungsvariable an den Befehl EXECUTE IMMEDIATE übergeben. Beispiel:
set stmt =
$$
declare
radius_of_circle float;
area_of_circle float;
begin
radius_of_circle := 3;
area_of_circle := pi() * radius_of_circle * radius_of_circle;
return area_of_circle;
end;
$$
;
execute immediate $stmt;