Kingbase-SQL语法3-调用函数

3 调用函数
KingbaseES 允许带有命名参数的函数被使用位置或命名记号法调用。命名记号法对于有大量参数的函数特别有用,它让参数和实际参数之间的关联更明显和可靠。在位置记号法中,书写一个函数调用时,其参数值要按照它们在函数声明中被定义的顺序书写。在命名记号法中,参数根据名称匹配函数参数,并且可以以任何顺序书写。对于每一种记法,还要考虑函数参数类型的效果
在任意一种记号法中,在函数声明中给出了默认值的参数根本不需要在调用中写出。但是这在命名记号法中特别有用,因为任何参数的组合都可以被忽略。而在位置记号法中参数只能从右往左忽略。
KingbaseES 也支持 混合 记号法,它组合了位置和命名记号法。在这种情况中,位置参数被首先写出并且命名
参数出现在其后。
下列例子将展示所有三种记号法的用法:
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 参数被强制为大写或小写形式。此函数的
3.1 使用位置记号
KingbaseES 中,位置记号法是给函数传递参数的传统机制:
SELECT concat_lower_or_upper('Hello', 'World', true);
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
所有参数被按照顺序指定。结果是大写形式,因为 uppercase 被指定为 true 。另一个例子:
SELECT concat_lower_or_upper('Hello', '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 => 'Hello', b => 'World', uppercase => true);
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
SELECT concat_lower_or_upper(a => 'Hello', uppercase => true, b => 'World');
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
为了向后兼容性,基于 ”:=” 的旧语法仍被支持:
SELECT concat_lower_or_upper(a := 'Hello', uppercase := true, b := 'World');
concat_lower_or_upper
-----------------------
(continues on next page)
(continued from previous page)
HELLO WORLD
(1 row)
3.3 使用混合记号
混合记号法组合了位置和命名记号法。但是,正如已经提到过的,命名参数不能超越位置参数。例如:
SELECT concat_lower_or_upper('Hello', 'World', uppercase => true);
concat_lower_or_upper
-----------------------
HELLO WORLD
(1 row)
在上述查询中,参数 a b 被以位置指定,而 uppercase 通过名字指定。在这个例子中,只增加了一点
文档。在一个具有大量带默认值参数的复杂函数中,命名的或混合的记号法可以节省大量的书写并且减少出
错的机会。
Note: 命名的和混合的调用记号法当前不能在调用聚集函数时使用(但是当聚集函数被用作窗口函数时它们
可以被使用)。
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值