当前位置: 首页 > 知识库问答 >
问题:

在部署存储过程时使用会话变量-Snowflake

郗缪文
2023-03-14

我正在寻找的是能够使用变量,可以在部署时替换。像这样的东西

var env= 'dev';

create or replace procedure test
returns varchar
language javascript
as
$$
insert into raw_$env.employee values(1);
$$;

当我运行这段代码时,我希望这样部署代码。

create or replace procedure test
returns varchar
language javascript
as
$$
insert into raw_raw.employee values(1);
$$;

共有1个答案

元鸿波
2023-03-14

要指定动态模式名,可以使用IDENTIFIER()。然后使用javascript存储过程API执行。

create or replace procedure test()
returns text
language javascript
execute as caller
as
$$
  snowflake.createStatement({ sqlText: `set t = 'raw_' || $env || '.employee'` }).execute()
  snowflake.createStatement({ sqlText: `insert into identifier($t) values(1)` }).execute()
  return 'SUCCESS'
$$;

set env= 'dev';

call test();

您可能还希望指定数据库。

更新--静态解决方案,硬编码“env”参数

在SNOWSQL中运行

!define env=dev;

create or replace procedure test()
returns text
language javascript
execute as caller
as
$$
  snowflake.createStatement({ sqlText: `insert into raw_&env.employee values(1)` }).execute()  return 'SUCCESS'
$$;

验证子项是静态的:

select get_ddl('procedure','test()')

还可以在配置文件或SNOWSQL命令行中定义env参数。

 类似资料:
  • 问题内容: 当访问一个页面时,我想启动一个会话并存储一个会话变量: 然后从另一个页面,我想检查该会话变量是否已存储: 此代码对我不起作用。 问题答案: 从对该问题的评论来看,似乎缺少调整后的会话 。save_path 导致PHP会话处理程序的这种行为不当。只需指定一个存在的目录(在文档根目录之外),该目录就可以被PHP读取和写入,以解决此问题。

  • 问题内容: 使用大猩猩会话网络工具包时,不会跨请求维护会话变量。当我启动服务器并输入localhost:8100 /时,由于会话值不存在,页面被定向到login.html。登录后,我在商店中设置了会话变量,页面被重定向到home.html。但是,当我打开一个新选项卡并键入localhost:8100 /时,应使用已存储的会话变量将页面定向到home.html,但应将页面重定向到login.html

  • sessionStorage 会话存储 存储针对QQ帐号隔离 数据存储于内存中,当前游戏结束后被清空 函数 key( index ) 获取对应索引的key 手q 版本7.8.5 参数 参数名 类型 说明 index number 索引值 返回值 类型 说明 string 说明 示例 var stringKey = BK.sessionStorage.key(0); getItem( key )

  • 作为Hibernate中BLOB值的后期创建钩子的替代方法,我认为数据库内触发器是更好的解决方案,因此我尝试编写以下触发器: 将与触发器一起使用,例如: 然而,我无法计算出构建语句的语法。 [2022-03-09 16:14:51][42601]ERROR:语法错误在或接近lo_oid [2022-03-09 16:14:51]位置:279 真的不可能像在其他语句中那样使用变量吗?

  • 我正在使用jQuery mobile和Spring MVC开发一个包含多页模板的移动应用程序。我有一个包含锚链接的jsp;每当我单击链接时,就会调用事件并执行jQuery函数。我从函数中的链接获得了一个id,并将其存储在jQuery变量中。现在我想重用jstltag中jQuery变量的值,该值在核心标记库中可用。如何使用该值?这是我的jsp:

  • 问题内容: 如果一个用户已经登录并尝试在新实例中再次登录,我希望它注销另一个用户实例。我不希望同一用户在我的应用程序上登录两次。 当前会话存储在Redis存储中,我正在使用express / connect处理会话存储。可以用来破坏会话的可用功能之一如下: 但是,我需要在调用.destroy()之前找到该会话ID。在Redis中,用户名存储为会话的一部分。 问题:是否可以查询Redis以基于用户名