在 SnowSQL、Classic Console 和 Python Connector 中使用 Snowflake Scripting¶
本主题介绍如何在 SnowSQL、Classic Console 和 Python Connector 中运行 Snowflake Scripting 示例。
备注
如果您使用的是其他客户端和界面(例如 Snowsight 或 JDBC 驱动程序),则可跳过本主题并转到 Snowflake Scripting 块。
简介¶
目前,以下接口无法正确解析 Snowflake Scripting 块:
Python Connector 代码中的
execute_stream()
和execute_string()
方法备注
其他 Python Connector 方法可正确解析 Snowflake Scripting 块。
输入并运行 Snowflake Scripting 块可能会导致以下错误:
SQL compilation error: syntax error line 2 at position 25 unexpected '<EOF>'
要解决此问题,请在 Snowflake Scripting 块的开头和结尾周围使用分隔符(如果您正在使用这些接口)。
以下各节说明如何执行此操作:
在存储过程中的块周围使用字符串常量分隔符¶
如果要创建存储过程,请将 Snowflake Scripting 块放在 单引号或双美元符号 中。例如:
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;
$$
;
将块作为字符串字面量传递给 EXECUTE IMMEDIATE¶
如果您正在编写一个 :ref:` 匿名块 <label-snowscript_block_anonymous>` ,请将该块作为字符串字面量传递给 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;
$$
;
或者,您可以定义一个 会话变量,该变量是包含块的字符串字面量,并且可以将该会话变量传递给 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;