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:
Os métodos
execute_stream()
eexecute_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>'
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;
$$
;
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;
$$
;
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;