如何在雪花视图中将数据库名称作为查询中的变量

问题描述 投票:0回答:1

我想通过从 current_database() 获取数据库名称并将其传递到视图中,例如

create view viewname as select * from db.schema.tablename
.

以便它可以跨不同数据库运行(架构和表名在不同环境下保持不变)

设置会话变量没有帮助,因为对于不同的用户,它会抛出错误,指出找不到该变量。有没有其他方法可以做到?

variables snowflake-cloud-data-platform
1个回答
0
投票

还有一种不使用会话变量的替代方法,即创建一个使用 current_database() 函数动态生成视图定义的函数。

CREATE OR REPLACE FUNCTION generate_view_definition()
RETURNS TEXT AS $$
BEGIN
    RETURN 'CREATE OR REPLACE VIEW viewname AS SELECT * FROM ' || current_database() || '.schema.tablename;';
END;
$$ LANGUAGE plpgsql;

使用以下命令执行函数以获取视图的动态SQL

SELECT generate_view_definition();

& 使用动态 SQL 创建视图

DO $$
BEGIN
    EXECUTE generate_view_definition();
END;
$$;

这将执行动态 SQL 以使用从 current_database() 获取的数据库名称创建视图。

注: 请记住,在视图中使用动态 SQL 可能会对安全性和性能产生影响,因此请确保在生产环境中实现之前进行彻底的验证和测试。

© www.soinside.com 2019 - 2024. All rights reserved.