SnowSQL、 Classic Console、Python ConnectorでSnowflakeスクリプトを使用する

このトピックでは、 SnowSQLClassic ConsolePython Connector でSnowflakeスクリプトの例を実行する方法について説明します。

注釈

他のクライアントとインターフェイス(例: Snowsight または JDBC ドライバー)を使用している場合は、このトピックをスキップして、 Snowflakeスクリプトのブロック をご参照ください。

概要

現在、以下のインターフェイスはSnowflakeスクリプトのブロックを正しく解析しません。

  • SnowSQL

  • Classic Console

  • Python Connector コードの execute_stream() および execute_string() メソッド

    注釈

    他のPython ConnectorメソッドはSnowflakeスクリプトのブロックを正しく解析します。

Snowflakeスクリプトのブロックを入力して実行すると、次のエラーが発生する可能性があります。

SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
Copy

これらのインターフェイスを使用している場合にこの問題を回避するには、Snowflakeスクリプトのブロックの開始と終了を区切り文字で囲みます。

次のセクションでは、これを行う方法について説明します。

ストアドプロシージャのブロック周辺における文字列定数区切り文字の使用

ストアドプロシージャを作成する場合は、Snowflakeスクリプトのブロックを 一重引用符または二重ドル記号 で囲みます。例:

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

ブロックを文字列リテラルとして EXECUTE IMMEDIATE に渡す

匿名ブロック を記述している場合は、ブロックを文字列リテラルとして EXECUTE IMMEDIATE コマンドに渡します。文字列リテラルを区切るには、 一重引用符または二重ドル記号 を使用します。

例:

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

別の方法として、ブロックを含む文字列リテラルである セッション変数 を定義し、そのセッション変数を EXECUTE IMMEDIATE コマンドに渡すことができます。例:

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