在存储过程中创建 Snowflake 仓库会更改当前仓库
Posted
技术标签:
【中文标题】在存储过程中创建 Snowflake 仓库会更改当前仓库【英文标题】:Creating a Snowflake warehouse in a stored procedure changes the current warehouse 【发布时间】:2020-01-18 19:25:27 【问题描述】:我正在尝试编写一个创建用户、角色和warhouse 的程序。此过程由具有 ACCOUNTADMIN 角色的高权限用户执行
USE ACCOUNT_ADMIN;
USE WAREHOUSE PROVISIONER;
CREATE or replace PROCEDURE TEST()
RETURNS VARCHAR
LANGUAGE javascript
AS
$$
snowflake.execute( sqlText: "CREATE OR REPLACE WAREHOUSE test;");
return "";
$$
;
现在如果我查询当前仓库:
SELECT CURRENT_WAREHOUSE();
我收到PROVISIONER
如果我现在调用该过程
CALL TEST();
仓库变了
SELECT CURRENT_WAREHOUSE();
现在返回TEST
这是正常行为吗?这是一个问题,因为仓库是在过程之外更改的,我不能在过程中使用“USE WAREHOUSE”语句。
是否有另一种方法可以在不更改当前仓库的情况下从过程创建 WAREHOUSE?
【问题讨论】:
【参考方案1】:是的,这是意料之中的。有关背景信息,请参阅the docs。
解决此问题的一种方法是在存储过程开始时获取当前仓库,并在存储过程结束时再次将其设置为当前仓库。
【讨论】:
在我的测试中,我直接创建仓库时也会出现这种情况,没有过程。 是的,创建仓库和数据库/模式也总是将它们设置为当前的。 很高兴知道,但我可以看到它没有记录在案。不要分裂头发。 感谢这个问题是存储过程中不允许使用“USE仓库”,所以我无法将当前仓库改回原来的样子。以上是关于在存储过程中创建 Snowflake 仓库会更改当前仓库的主要内容,如果未能解决你的问题,请参考以下文章