Snowflake存储过程运行时如何获取自身被调用的query id?
报错&实现逻辑错误原因
last_query_id()取的是当前会话中已经执行完成的上一条查询的ID,存储过程运行过程中自身的CALL语句还处于执行状态,无法被该函数捕获- 存储过程内部执行
select last_query_id()属于新的独立查询,即使运行成功也只会返回存储过程内部上一条执行完成的语句ID,不是存储过程自身的调用ID
正确实现方案
Snowflake的JavaScript存储过程提供了内置方法snowflake.getQueryId(),可以直接获取当前正在运行的存储过程自身的调用QUERY ID,无需额外执行SQL查询。
修正后的存储过程代码如下:
create or replace procedure test_proc111 ("SRC" VARCHAR(30), "TGT" VARCHAR(30)) returns varchar language javascript execute as owner as $$ var sp_call_query_id = snowflake.getQueryId(); // 此处可添加你的业务逻辑,将ID存入变量/写入目标表等 return sp_call_query_id; $$;
调用验证:
call test_proc111('TEST','TARGET');
调用完成后执行select last_query_id(),返回结果和存储过程返回的ID完全一致,可验证正确性。
内容的提问来源于stack exchange,提问作者rita mishra
相关产品推荐
相关产品推荐

