You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake:如何在执行中的存储过程内部获取其所属模式?

获取Snowflake存储过程自身所属模式(EXECUTE AS CALLER模式下)

在Snowflake中,确实可以在EXECUTE AS CALLER的存储过程内部获取其自身所属的模式,完全不需要切换到EXECUTE AS OWNER。这里有个直接可行的解决方案:

  • 使用Snowflake内置的SYSTEM$CURRENT_PROCEDURE_NAME()函数获取存储过程的完全限定名称(格式为数据库名.模式名.存储过程名)
  • 通过字符串拆分函数提取其中的模式部分

示例实现

以下是完整的存储过程代码,演示如何获取自身所属模式:

CREATE OR REPLACE PROCEDURE UTIL.P_TEST()
RETURNS VARCHAR
LANGUAGE SQL
EXECUTE AS CALLER
AS
$$
DECLARE
  -- 获取存储过程的完全限定名称
  full_proc_name VARCHAR := SYSTEM$CURRENT_PROCEDURE_NAME();
  -- 拆分字符串提取模式名:拆分点为'.',取第2个部分
  proc_schema VARCHAR := SPLIT_PART(full_proc_name, '.', 2);
BEGIN
  RETURN CONCAT('当前存储过程所属模式: ', proc_schema);
END;
$$;

测试验证

当你在NOT_UTIL模式下调用这个存储过程时:

USE NOT_UTIL;
CALL UTIL.P_TEST();

返回结果会是:当前存储过程所属模式: UTIL,完全符合你的需求。

原理说明

  • SYSTEM$CURRENT_PROCEDURE_NAME()函数会返回当前正在执行的存储过程的完整三部分名称(即使跨数据库调用也能正确返回),不受调用者会话上下文的影响
  • SPLIT_PART()函数按照.分隔符拆分字符串,第二部分就是存储过程所属的模式名;如果是跨数据库场景,第一部分是数据库名,第二部分依然是模式名,逻辑同样适用

这个方法完全适配EXECUTE AS CALLER的场景,不需要修改执行权限就能拿到存储过程自身的所属模式。

内容的提问来源于stack exchange,提问作者jduckwo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:59:06