首页 > 解决方案 > 无法在 Snowflake 存储过程中创建临时阶段对象

问题描述

以下存储过程执行返回错误消息“存储过程执行错误:不支持的语句类型“临时 STAGE ”。” 从存储过程定义中删除关键字 'temporary' 可以解决问题,并且可以在没有任何错误的情况下执行它。

这怎么可能 ?根据其文档,Snowflake 支持创建临时阶段。最重要的是,相同的 SQL 语句一旦在存储过程之外执行就可以正常工作。

CREATE OR REPLACE PROCEDURE "TEST_TEMP_STAGE"()
RETURNS FLOAT
LANGUAGE JAVASCRIPT
STRICT
EXECUTE AS OWNER
AS $$
    var req='create  temporary stage my_temp_stage;'
    snowflake.createStatement( { sqlText: req } ).execute();
    return 0;
$$

标签: stored-proceduressnowflake-cloud-data-platform

解决方案


您应该将您的过程定义为“EXECUTE AS CALLER”,以便能够在您的存储过程中创建一个临时阶段。

CREATE OR REPLACE PROCEDURE "TEST_TEMP_STAGE"()
RETURNS FLOAT
LANGUAGE JAVASCRIPT
STRICT
EXECUTE AS CALLER
AS $$
    var req='create temporary stage my_temp_stage;'
    snowflake.createStatement( { sqlText: req } ).execute();
    return 0;
$$
;

call TEST_TEMP_STAGE();

推荐阅读