调用函数
postgresql允许函数有命名参数,可以被位置或者名称表示法调用。名称表示法对有大量参数的函数特别有用,因为他更加明确和可靠的标记了形参和参数之间的联系。在位置标示法里,一个函数调用的参数值要用与函数声明相同的顺序来写出。在名称标示法里,参数是通过名称来与函数参数相匹配的,可以以任意顺序写出。
不管用那种表示法,在函数声明时给出的有默认值的参数在调用时不必写出。但是这在名称表示法中是特别有用的,因此参数的任意组合都是可以省略的。而在位置表示法中,参数只能从右到左省略。
postgresql 也支持混合表示法,混合表示法结合了位置和名称表示法。因为这个原因,先写位置参数,然后跟着写命令参数。
下面的例子将说明三种表示法的用法,使用下面定义的函数定义:
create function concat_lower_or_upper(a text,b text,uppercase boolean default false)
returns text as
$$
select case when $3 then upper($1 || ' ' || $2)
else lower($1 || ' ' || $2) end;
$$
language sql immutable strict;
其中concat_lower_or_upper有两个强制的参数,a和b。而且第三个参数是一个可选参数uppercase,默认为false。a和b输入将被串联,并且将根据uppercase参数强制转换为大写或者小写。
使用位置表示法
位置表示法是传递参数到函数的传统机制。所有的参数都是按顺序指定。
案例:
select concat_lower_or_upper('Hello','World',true) as 大写,
concat_lower_or_upper('Hello','World') as 默认转换小写,
concat_lower_or_upper('Hello','World',false) as 小写;
输出结果。函数默认为false输出为小写。声明为true,则输出结果为大写。
使用名称表示法
在名称表示法中,每个参数名称是使用:=(冒号加等号)声明的,用来将他从参数表达式中独立出来。
案例:
select concat_lower_or_upper(a:='Hello',b:='World',uppercase:=true) as 大写,
concat_lower_or_upper(a:='Hello',b:='World') as 默认转换小写,
concat_lower_or_upper(a:='Hello',b:='World',uppercase:=false) as 小写;
使用混合表示法
混合表示法结合了位置和名称表示法。命名参数不可以在位置参数前面。
select concat_lower_or_upper('Hello','World',uppercase:=true) as 大写;