Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector

This topic explains how to run the Snowflake Scripting examples in Snowflake CLI, SnowSQL, and the Python Connector.

Bemerkung

If you are using other clients and interfaces, such as Snowflake CLI or the JDBC driver, you can skip this topic and refer to Snowflake Scripting blocks.

Einführung

Derzeit werden Snowflake Scripting-Blöcke von den folgenden Schnittstellen nicht korrekt analysiert:

  • Snowflake CLI

  • SnowSQL

  • Die Methoden execute_stream() und execute_string() in Python-Konnektor-Code

    Bemerkung

    Die anderen Python-Konnektor-Methoden parsen Snowflake Scripting-Blöcke korrekt.

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>'
Copy

Um dies zu umgehen, müssen Sie bei Verwendung dieser Schnittstellen Anfang und 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 Trennzeichen um einen Block in einer gespeicherten Prozedur

Wenn Sie eine gespeicherte Prozedur 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;
  $$
  ;
Copy

Bemerkung

Wenn Sie den Scripting-Block direkt in der Snowflake CLI-Befehlszeile angeben, funktionieren die Trennzeichen $$ bei einigen Shells möglicherweise nicht, da sie dieses Trennzeichen als etwas anderes interpretieren. Die Shells bash und zsh zum Beispiel interpretieren es als die Prozess-ID (PID). Um diese Beschränkung zu umgehen, können Sie die folgenden Alternativen verwenden:

  • Wenn Sie den Skriptblock dennoch in der Befehlszeile angeben möchten, können Sie die $$-Begrenzungszeichen maskieren, wie in \$\$.

  • Sie können den Skriptblock auch mit den standardmäßigen $$-Begrenzungszeichen in eine separate Datei schreiben und mit dem Befehl snow sql -f <filename> aufrufen.

Ü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;
$$
;
Copy

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;
Copy

Bemerkung

Wenn Sie den Scripting-Block direkt in der Snowflake CLI-Befehlszeile angeben, funktionieren die Trennzeichen $$ bei einigen Shells möglicherweise nicht, da sie dieses Trennzeichen als etwas anderes interpretieren. Die Shells bash und zsh zum Beispiel interpretieren es als die Prozess-ID (PID). Um diese Beschränkung zu umgehen, können Sie die folgenden Alternativen verwenden:

  • Wenn Sie den Skriptblock dennoch in der Befehlszeile angeben möchten, können Sie die $$-Begrenzungszeichen maskieren, wie in \$\$.

  • Sie können den Skriptblock auch mit den standardmäßigen $$-Begrenzungszeichen in eine separate Datei schreiben und mit dem Befehl snow sql -f <filename> aufrufen.