如何在雪花SQL函数中使用参数作为值?

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

我正在尝试创建一个如下所示的 SQL 函数,我将数据库名称、架构名称和表名称作为输入传递。我无法使用 information_schema 的输入数据库名称

下面是我的雪花函数:

CREATE OR REPLACE FUNCTION FN_GET_COLUMNS(DatabaseName VARCHAR,SchemaName VARCHAR,TableName VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
AS
$$


WITH data_columns AS (
    SELECT UPPER(column_name) AS column_name
    FROM information_schema.columns 
    WHERE table_catalog = UPPER(DatabaseName)
        AND table_schema = UPPER(SchemaName)
        AND table_name = UPPER(TableName)
        AND is_identity != 'YES'
) SELECT LISTAGG('src.'||column_name, ', ') within group(order by column_name) as data_col
FROM data_columns
WHERE NOT STARTSWITH(column_name,'__')
$$; 

我无法使用

DatabaseName.information_schema.columns
[其中 DatabaseName 是输入参数]?

有什么解决办法吗?

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

您应该在引用参数之前加上“:”。

--未经测试

CREATE OR REPLACE FUNCTION FN_GET_COLUMNS(DatabaseName VARCHAR,SchemaName VARCHAR,TableName VARCHAR)
RETURNS VARCHAR
LANGUAGE SQL
AS
$$


WITH data_columns AS (
    SELECT UPPER(column_name) AS column_name
    FROM information_schema.columns 
    WHERE table_catalog = UPPER(:DatabaseName)
        AND table_schema = UPPER(:SchemaName)
        AND table_name = UPPER(:TableName)
        AND is_identity != 'YES'
) SELECT LISTAGG('src.'||column_name, ', ') within group(order by column_name) as data_col
FROM data_columns
WHERE NOT STARTSWITH(column_name,'__')
$$;
© www.soinside.com 2019 - 2024. All rights reserved.