PostgreSQL SQL语法(三):调用函数
原文地址
PostgreSQL允许带有命名参数的函数被使用位置或命名记号法调用。命名记号法对于有大量参数的函数特别有用,因为它让参数和实际参数之间的关联更明显和可靠。在位置记号法中,书写一个函数调用时,其参数值要按照它们在函数声明中被定义的顺序书写。在命名记号法中,参数根据名称匹配函数参数,并且可以以任何顺序书写。 在任意一种记号法中,在函数声明中给出了默认值的参数根本不需要在调用中写出。但是这在命名记号法中特别有用,因为任何参数的组合都可以被忽略。而在位置记号法中参数只能从右往左忽略。 PostgreSQL也支持混合记号法,它组合了位置和命名记号法。在这种情况中,位置参数被首先写出并且命名参数出现在其后。 下列例子将展示所有三种记号法的用法: CREATE FUNCTION concat_lower_or_upper(a text,b boolean DEFAULT false)
RETURNS text
AS
$$
SELECT CASE
WHEN $3 THEN UPPER($1 || ' ' || $2)
ELSE LOWER($END;
$$
LANGUAGE SQL IMMUTABLE STRICT;
函数concat_lower_or_upper有两个强制参数,a和b。此外,有一个可选的参数uppercase,其默认值为false。a和b输入将被串接,并且根据uppercase参数被强制为大写或小写形式。这个函数的剩余细节对这里并不重要(详见Chapter 36)。 3.1. 使用位置记号 在PostgreSQL中,位置记号法是给函数传递参数的传统机制。一个例子: SELECT concat_lower_or_upper('Hello','World',true);
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
所有参数被按照顺序指定。结果是大写形式,因为uppercase被指定为true。另一个例子: 'World');
concat_lower_or_upper
-----------------------
hello world
(1 row)
这里,uppercase参数被忽略,因此它接收它的默认值false,并导致小写形式的输出。在位置记号法中,参数可以按照从右往左被忽略并且因此而得到默认值。 3.2. 使用命名记号 在命名记号法中,每一个参数名都用=> 指定来把它与参数表达式分隔开。例如: SELECT concat_lower_or_upper(a => 'Hello',b => 'World');
concat_lower_or_upper
-----------------------
hello world
(1 row)
再次,参数uppercase被忽略,因此它被隐式地设置为false。使用命名记号法的一个优点是参数可以用任何顺序指定,例如: SELECT concat_lower_or_upper(a => true);
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
SELECT concat_lower_or_upper(a => true,116)">'World');
concat_lower_or_upper
-----------------------
HELLO WORLD
( 为了向后兼容性,基于 ":=" 的旧语法仍被支持:
|