Uso do Script Snowflake em SnowSQL, Classic Console e conector Python

Este tópico explica como executar os exemplos do Script Snowflake em SnowSQL, Classic Console, e o conector Python.

Nota

Se você estiver usando outros clientes e interfaces (por exemplo, Snowsight ou o driver JDBC), você pode pular este tópico e consultar blocos do Script Snowflake.

Introdução

Atualmente, as seguintes interfaces não analisam corretamente os blocos de script do Snowflake:

  • SnowSQL

  • Classic Console

  • Os métodos execute_stream() e execute_string() no código do conector Python.

    Nota

    Os outros métodos do conector Python analisam corretamente os blocos de script do Snowflake.

Entrar e executar um bloco do Script Snowflake pode resultar no seguinte erro:

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

Para contornar esse problema, use delimitadores no início e no fim de um bloco do Script Snowflake se estiver usando essas interfaces.

As seções a seguir explicam como fazer isso:

Como usar delimitadores de constante de cadeia de caracteres em torno de um bloco em um procedimento armazenado

Se você estiver criando um procedimento armazenado, coloque o bloco do Script Snowflake entre aspas simples ou cifrões duplos. Por exemplo:

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

Passagem de um bloco como uma cadeia de caracteres literal para EXECUTE IMMEDIATE

Se você estiver escrevendo um bloco anônimo, passe o bloco como uma cadeia de caracteres literal para o comando EXECUTE IMMEDIATE. Para delimitar a cadeia de caracteres literal, use aspas simples ou cifrões duplos.

Por exemplo:

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

Como alternativa, você pode definir uma variável de sessão que seja uma cadeia de caracteres literal contendo o bloco, e você pode passar essa variável de sessão para o comando EXECUTE IMMEDIATE. Por exemplo:

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