我正在尝试创建一个如下所示的 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 是输入参数]?
有什么解决办法吗?
您应该在引用参数之前加上“:”。
--未经测试
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,'__')
$$;