我正在Snowflake中创建一个新的SQL UDF,并且UDF创建成功.但是,当我在调用UDF的同时传递值时,我出现了错误.

001044(42P13):SQL编译错误:位置20处的错误行1.

函数‘FNTUSERLIST’的参数类型无效:(数组)

以下是复制相同内容的步骤.

100

CREATE TABLE UserLoad(
Idx Int identity(1,1),
UserName varchar(1000),
UserAge int

)

100

insert into UserLoad(UserName,UserAge)
select 'Rahul',39 UNION 
select 'Sankalp',38 UNION 
select 'Arun',35 ;

100

CREATE OR REPLACE FUNCTION fntuserList (I_UserName array,I_UserAge array)
RETURNS TABLE (Id int,UserName varchar(256),UserAge int)
AS 
$$
    select Idx as Id,UserName,UserAge from  UserLoad
$$; 

100

select * from table(fntuserList(ARRAY_CONSTRUCT('1','2')));

请注意,我想在逻辑中进一步在SQL中使用输入参数.但到目前为止,无法调用函数,因此底层逻辑是不完整的.

推荐答案

函数fntuserList需要两个数组,并且应该提供它们:

-- empty array
select * from table(fntuserList(['1','2'], []));

-- NULL value
select * from table(fntuserList(['1','2'], NULL::ARRAY));

此外,为了提高可读性,可以使用命名参数:

select * 
from table(fntuserList(I_UserName => ['1','2'], I_UserAge => []));  

Sql相关问答推荐

返回包含列和包含其他列的列表的自定义查询

解析SQL Server中的嵌套JSON

如何在postgres函数中插入后返回布尔值?

PostgreSQL使用SQL子查询在时间间隔内 Select 数据

按分类标准检索记录

仅当交叉应用返回单值时才更新记录

在查询Oracle SQL中创建替代ID

数据库SQL-CTE命名空间(错误?)使用临时视图

在VB.NET中如何在MS Access数据库中创建SQL项目历史库存卡

使用同一个表,为什么IN、NOT IN、NOT EXISTS和EXISTS有不同的输出?

使用多个WITH子查询的替代方法

Proc SQL Select Distinct SAS

将最近的结束日期与开始日期相匹配

将时间戳四舍五入到最近 10 分钟的查询

试图找到两个身份列表的交集(列表的长度不同),但获取列 id 不明确?

SQL Select 字母范围没有给我任何东西

更新之前如何获得价值

使用ALTER TABLE无法删除列

删除具有相同 ID 的重复记录 - Postgresql

如何刷新在视图之上创建的表