Utilisation d’Exécution de scripts Snowflake dans SnowSQL et l”Classic Console

Cette rubrique explique comment exécuter les exemples d’Exécution de scripts Snowflake dans SnowSQL et l”Classic Console.

Note

Si vous utilisez d’autres clients et interfaces (par exemple, Snowsight ou le pilote JDBC), vous pouvez ignorer cette rubrique et passer à la section suivante sur les blocs Exécution de scripts Snowflake.

Dans ce chapitre :

Introduction

Actuellement, SnowSQL et l”Classic Console n’analysent pas correctement les blocs Exécution de scripts Snowflake. La saisie et l’exécution d’un bloc Exécution de scripts Snowflake peuvent entraîner l’erreur suivante :

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

Pour contourner ce problème, vous devez utiliser des délimiteurs au début et à la fin d’un bloc Exécution de scripts Snowflake, si vous utilisez SnowSQL ou l”Classic Console.

Les sections suivantes expliquent comment procéder :

Utilisation de délimiteurs de constante de chaîne autour d’un bloc dans une procédure stockée

Si vous créez une procédure stockée dans SnowSQL ou dans l”Classic Console, placez le bloc Exécution de scripts Snowflake entre des guillemets simples ou des doubles signes de dollar. Par exemple :

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

Transmettre un bloc en tant que littéral de chaîne vers EXECUTE IMMEDIATE

Si vous écrivez un bloc anonyme, passez le bloc comme un littéral de chaîne dans la commande EXECUTE IMMEDIATE. Pour délimiter le littéral de chaîne, utilisez les guillemets simples ou les doubles signes de dollar.

Par exemple :

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

Vous pouvez également définir une variable de session qui est un littéral de chaîne contenant le bloc, et vous pouvez passer cette variable de session à la commande EXECUTE IMMEDIATE. Par exemple :

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