Como usar o Script Snowflake no SnowSQL e na Classic Console

Este tópico explica como executar os exemplos do Script Snowflake no SnowSQL e na Classic Console.

Nota

Se você estiver usando outros clientes e interfaces (por exemplo, Snowsight ou o driver JDBC), você pode pular este tópico e ir para a próxima seção sobre blocos do Script Snowflake.

Neste tópico:

Introdução

Atualmente, o SnowSQL e a Classic Console não analisam corretamente os blocos do Script 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 isto, você deve usar delimitadores em torno do início e do fim de um bloco do Script Snowflake se você estiver usando o SnowSQL ou a Classic Console.

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 no SnowSQL ou na Classic Console, 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