从存储过程中进行选择¶
某些存储过程会返回表格数据。要选择和操作这些表格数据,可以在 SELECT 语句的 FROM 子句中调用这些存储过程。
运行具有 TABLE 关键字的 SELECT 语句¶
调用存储过程时,忽略 CALL 命令。相反,使用 TABLE 关键字,并在括号内命名过程:
从存储过程中进行选择的示例¶
此示例使用下表中的数据:
以下存储过程会返回基于用户 ID 的订单信息:
Note: If you use Snowflake CLI, SnowSQL, the Classic Console, or the
execute_stream or execute_string method in Python Connector
code, use this example instead (see Using Snowflake Scripting in Snowflake CLI, SnowSQL, and Python Connector):
以下 SELECT 语句将检索存储过程的结果:
从存储过程中进行选择的限制¶
以下限制适用于从存储过程中进行选择:
只有执行 SELECT、SHOW、DESCRIBE 或 CALL 语句的存储过程才能放在 SELECT 语句的 FROM 子句中。不允许使用 DDL 或 DML 操作进行修改的存储过程。对于发出 CALL 语句的存储过程,这些限制适用于调用的存储过程。
只有返回带有静态输出架构的表格数据的存储过程才能放在 SELECT 语句的 FROM 子句中。必须为输出列指定名称和类型。例如,支持具有以下 RETURNS 子句的存储过程:
不支持具有以下 RETURNS 子句的存储过程,因为它不返回表格数据:
不支持具有以下 RETURNS 子句的存储过程,因为它不提供固定的输出架构:
必须使用以下语句之一的 SELECT 块的 FROM 子句调用存储过程:
存储过程不能接受来自其外部范围的相关输入实参,例如对任何在 SELECT 语句外定义的 CTE 的引用。
如果实参包含子查询,则该子查询不能使用 WITH 子句定义的 CTE。
包含存储过程调用的 SELECT 语句不能用于视图、用户定义的函数 (UDF)、用户定义的表函数 (UDTF) 或对象(如 行访问策略 和 数据掩码策略)的主体中。
在调用存储过程的 SELECT 语句中不能使用 绑定变量。例如,不能使用以下 SELECT 语句: