zoukankan      html  css  js  c++  java
  • 1008.函数调用

    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参数被强制为大写或小写形式。

    使用位置记号

    在PostgreSQL中,位置记号法是给函数传递参数的传统机制。一个例子:

    SELECT concat_lower_or_upper('Hello', 'World', true);

    所有参数被按照顺序指定。结果是大写形式,因为uppercase被指定为true。另一个例子:

    SELECT concat_lower_or_upper('Hello', 'World');

    这里,uppercase参数被忽略,因此它接收它的默认值false,并导致小写形式的输出。在位置记号法中,参数可以按照从右往左被忽略并且因此而得到默认值。

    使用命名记号

    在命名记号法中,每一个参数名都用=> 指定来把它与参数表达式分隔开例如:

    SELECT concat_lower_or_upper(a => 'Hello', b => 'World');

    再次,参数uppercase被忽略,因此它被隐式地设置为false。使用命名记号法的一个优点是参数可以用任何顺序指定,例如:

    SELECT concat_lower_or_upper(a => 'Hello', b => 'World', uppercase => true);

    为了向后兼容性,基于 ":=" 的旧语法仍被支持:

    SELECT concat_lower_or_upper(a := 'Hello', uppercase := true, b := 'World');

    使用混合记号

    混合记号法组合了位置和命名记号法。不过,正如已经提到过的,命名参数不能超越位置参数。例如:

    SELECT concat_lower_or_upper('Hello', 'World', uppercase => true);

    在上述查询中,参数a和b被以位置指定,而uppercase通过名字指定。

    在这个例子中,这只增加了一点文档。

    在一个具有大量带默认值参数的复杂函数中,命名的或混合的记号法可以节省大量的书写并且减少出错的机会。

    命名的和混合的调用记号法当前不能在调用聚集函数时使用(但是当聚集函数被用作窗口函数时它们可以被使用)。

  • 相关阅读:
    ARM指令集----寻址方式
    [js] 实现接口
    sublime自定义配置
    [javascript] postmessage
    [javascript] visible - 待写
    [读书笔记]24个比利
    解决div里面img的缝隙问题(转)
    【JAVASCRIPT】React + Redux
    【JAVASCRIPT】React 学习
    代理
  • 原文地址:https://www.cnblogs.com/bufuzhou/p/14176470.html
Copyright © 2011-2022 走看看