返回值

若要返回值,请使用 RETURN 命令。您可以从以下位置返回值:

  • 存储过程中的块。

  • 匿名块。

返回值的类型

可以返回以下类型的值:

  • 在 RETURN 语句中使用 TABLE(...)

    如果块在存储过程中,还必须指定 RETURNS TABLE(...) 语句中的 CREATE PROCEDURE 子句。

    备注

    目前,在 RETURNS TABLE(...) 子句中,您无法指定 GEOGRAPHY 作为列类型。这在创建存储过程和匿名过程中均适用。

    CREATE OR REPLACE PROCEDURE test_return_geography_table_1()
      RETURNS TABLE(g GEOGRAPHY)
      ...
    
    Copy
    WITH test_return_geography_table_1() AS PROCEDURE
      RETURNS TABLE(g GEOGRAPHY)
      ...
    CALL test_return_geography_table_1();
    
    Copy

    如果尝试指定 GEOGRAPHY 为列类型,则调用存储过程会导致该错误:

    Stored procedure execution error: data type of returned table does not match expected returned table type
    
    Copy

    要解决这个问题,可以省略 RETURNS TABLE() 中的列实参和类型。

    CREATE OR REPLACE PROCEDURE test_return_geography_table_1()
      RETURNS TABLE()
      ...
    
    Copy
    WITH test_return_geography_table_1() AS PROCEDURE
      RETURNS TABLE()
      ...
    CALL test_return_geography_table_1();
    
    Copy

    如果要返回 RESULTSET 指向的数据,请将 RESULTSET 传递给 TABLE(...),如下例所示:

    CREATE PROCEDURE ...
    RETURNS TABLE(...)
    ...
    RETURN TABLE(my_result_set);
    ...
    
    Copy

    请参阅 以表的形式返回 RESULTSET

返回变量的值

此示例声明了名为 my_var 的变量,将该变量用于 Snowflake Scripting 匿名块,然后返回该变量的值:

DECLARE
  my_var VARCHAR;
BEGIN
  my_var := 'Snowflake';
  RETURN my_var;
END;
Copy

注意:如果您在 Python Connector 代码中使用 Snowflake CLISnowSQLClassic Console 或者 execute_streamexecute_string 方法,请改用本示例(请参阅 在 Snowflake CLI、SnowSQL、Classic Console 和 Python Connector 中使用 Snowflake Scripting):

EXECUTE IMMEDIATE
$$
DECLARE
  my_var VARCHAR;
BEGIN
  my_var := 'Snowflake';
  RETURN my_var;
END;
$$;
Copy

使用从存储过程调用返回的值

请参阅 使用从存储过程调用返回的值

语言: 中文