Как написать функцию для дополнительных параметров в postgresql?
мое требование-записать необязательные параметры в функцию.Параметры являются необязательными иногда я добавлю или не буду передавать параметры в функцию.Может кто-нибудь помочь мне, как написать функцию.
Я пишу как
select *
from test
where field3 in ('value1','value2')
and ( is null or field1 = )
and ( is null or field2 = )
and ( is null or field3 = );
Я передаю параметры для запроса, но мой вывод не ожидается.когда я передаю все три параметра, мой вывод правильный,иначе он не ожидается.
2 ответов
вы можете определить дополнительные параметры, указав значение по умолчанию.
create function foo(p_one integer default null,
p_two integer default 42,
p_three varchar default 'foo')
returns text
as
$$
begin
return format('p_one=%s, p_two=%s, p_three=%s', p_one, p_two, p_three);
end;
$$
language plpgsql;
вы можете "опустить" параметры с конца, так что foo()
, foo(1)
или foo(1,2)
действительны. Если вы хотите указать только параметр, который не является первым, необходимо использовать синтаксис, указывающий имена параметров.
select foo();
возвращает: p_one=, p_two=42, p_three=foo
select foo(1);
возвращает: p_one=1, p_two=42, p_three=foo
select foo(p_three => 'bar')
возвращает: p_one=, p_two=42, p_three=bar
кроме VARIADIC опция, указанная @a_horse_with_no_name, которая является только синтаксическим сахаром для передачи массива с любым количеством элементов того же типа, вы не могу определите функцию с необязательными параметрами, потому что в postgres функции идентифицируются не только по ее имени, но и по ее аргументам и типам их.
что есть: create function foo (int) [...]
и create function foo (varchar) [...]
создать разные функции.
который вызывается при выполнении, например,select foo(bar)
зависит от бар сам тип данных. То есть: если это целое число, вы вызовете первое, а если это varchar, то будет вызван второй.
более того: если вы выполняете, например, select foo(now())
, потом