带有可选参数的Postgresql函数

时间:2019-11-28 14:47:56

标签: postgresql parameters stored-functions

有没有一种方法可以创建可以用可变数量的参数(逗号分隔,因此位置)调用的函数。 例如,用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...

当不提供参数select * from idxi()时有效,而仅提供一个...时无效。

我在哪里错了?

1 个答案:

答案 0 :(得分:0)

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

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

如果您只想传递第一个参数,则只需按位置传递(在参数后没有,即可)

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...