1

有没有办法创建一个可以用可变数量的参数调用的函数(逗号分隔,所以位置)。例如,使用 function1(param1,param2) 调用此类函数并可能使用 function1(,param2) 或 function1(param1,) 调用它?我创建了一个带有默认参数的函数,但调用它时出错:

select * from iDxi('3 days',) order by "Date" asc
ERROR:  syntax error at or near ")"
LINE 1: select * from iDxi('3 days',) order by "Date" asc

我的函数定义如下:

CREATE OR REPLACE FUNCTION public.idxi(
    mydated text DEFAULT '99 year'::text,
    mydatef text DEFAULT '-99 year'::text)
RETURNS TABLE...

它在不提供 argsselect * from idxi()时有效,但在仅提供一个时无效......

我哪里错了?

4

1 回答 1

1

如果您只想传递第二个参数,请按名称传递:

select *
from idxi(mydatef => '-3 days');

如果你只想传递第一个参数,你可以简单地按位置传递(,参数后面不带a)

select *
from idxi('3 days'); 

或按名称:

select *
from idxi(mydated => '3 days');

无关,但是:

如果要将间隔传递给函数,则应声明该类型的参数:

CREATE OR REPLACE FUNCTION public.idxi(
    mydated interval DEFAULT '99 year'::interval,
    mydatef interval DEFAULT '-99 year'::interval)
RETURNS TABLE...
于 2019-11-28T14:51:22.717 回答