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

Snowflake数组输入参数UDF调用报错:参数类型无效

问题分析

你遇到的Invalid argument types for function 'FNTUSERLIST': (ARRAY)错误,核心原因是函数定义了2个必选数组参数,但调用时只传入了1个参数,参数数量不匹配导致编译失败。

解决方案

1. 临时修复调用(适配现有函数)

如果只是想先验证函数可正常调用,暂时不需要第二个参数,调用时传入第二个空数组参数即可:

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

2. 优化函数定义(推荐,适配后续逻辑)

如果后续I_UserAge参数可能可选,可以将其设为带默认值的可选参数;同时完善函数逻辑,加入数组参数的使用示例(比如根据输入的用户名数组过滤数据):

CREATE OR REPLACE FUNCTION fntuserList (I_UserName array, I_UserAge array DEFAULT ARRAY_CONSTRUCT())
RETURNS TABLE (Id int, UserName varchar(256), UserAge int)
AS 
$$
    SELECT 
        Idx as Id,
        UserName,
        UserAge 
    FROM UserLoad
    -- 使用数组参数过滤:匹配用户名在输入数组中,或年龄在输入数组中(可根据需求调整逻辑)
    WHERE 
        ARRAY_CONTAINS(UserName::VARIANT, I_UserName)
        OR (ARRAY_SIZE(I_UserAge) > 0 AND ARRAY_CONTAINS(UserAge::VARIANT, I_UserAge))
$$;

此时调用可以只传第一个参数:

select * from table(fntuserList(ARRAY_CONSTRUCT('Rahul', 'Arun')));

也可以同时传两个参数:

select * from table(fntuserList(ARRAY_CONSTRUCT('Rahul'), ARRAY_CONSTRUCT(35,39)));

3. 若仅需单个数组参数

如果实际业务只需要一个数组参数,直接修改函数定义,去掉多余的参数即可:

CREATE OR REPLACE FUNCTION fntuserList (I_UserName array)
RETURNS TABLE (Id int, UserName varchar(256), UserAge int)
AS 
$$
    SELECT Idx as Id, UserName, UserAge FROM UserLoad
    WHERE ARRAY_CONTAINS(UserName::VARIANT, I_UserName)
$$;

调用方式保持你原来的写法即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:24:57