postgresql VARIADIC参数必须是最后一个输入参数

qcbq4gxm  于 12个月前  发布在  PostgreSQL
关注(0)|答案(3)|浏览(136)

如何创建两个VARIADIC参数。看看我的代码并纠正我。

CREATE OR REPLACE FUNCTION ip_source_test(
  text, text, date, date, VARIADIC int[], VARIADIC text[]
)
RETURNS TABLE (no_documents int, "Report By" text, "Report_By" text) 
AS $$
BEGIN
  IF 'Source Member' = $1 THEN
    RETURN QUERY SELECT.....
  ELSEIF 'company' = $1 THEN
    RETURN QUERY SELECT.....
  ELSE
    RAISE NOTICE 'Not Worked';
  END IF;
    RETURN;
END;
$$ LANGUAGE plpgsql;

Error: VARIADIC parameter must be the last input parameter.

字符串
在SQL代码IM应该使用6个参数。请更新我的示例代码。

yiytaume

yiytaume1#

每个函数只能有一个VARIADIC,因为variadic包含了调用者传递的其他参数。
如果你的意思是让调用者使用数组,那么无论如何使用variadic都没有意义,函数签名可能看起来像这样:

CREATE FUNCTION ip_source_test(text,text,date,date,int[], text[])

字符串

cnwbcb6i

cnwbcb6i2#

错误消息告诉您:
VARIADIC参数必须是最后一个输入参数。
从逻辑上讲,一个函数只能接受单个VARIADIC参数。在这个参数之前 * 可以有其他(非VARIADIC)参数。手册:
实际上,VARIADIC位置处或VARIADIC位置以外的所有实际参数都被收集到一个一维数组中

pod7payv

pod7payv3#

下面是同样的错误:
错误:VARIADIC参数必须是最后一个输入参数
因为我没有使用VARIADIC参数nums作为最后一个参数,如下所示:

CREATE FUNCTION my_func(VARIADIC nums INTEGER[], num INTEGER)
RETURNS VOID         -- ↑ Here ↑
AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;

字符串
因此,我使用VARIADIC参数nums作为最后一个参数,如下所示,然后解决了错误:

CREATE FUNCTION my_func(num INTEGER, VARIADIC nums INTEGER[])
RETURNS VOID                      -- ↑ Here ↑
AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;


doc在下面说:
该函数通过将最后一个参数标记为VARIADIC来声明;

相关问题