4.3. 调用函数

PostgreSQL允许通过positional或named符号来调用带有已命名参数的函数。

对于带有大量参数的函数来说,命名符号是非常有用的,因为它使参数和实际参数之间的关联更加明确和可靠。

对位置符号,函数调用时,它的参数值的顺序与在函数声明时的顺序相同。

对命名符号,参数名与函数的参数名相匹配,并且可以以任意顺序书写。

对任意一个符号,函数声明时带有缺省值的参数,在调用时完全不需要写上。

对命名符号,因为参数的任意组合可以省略,所以刚才的方法会非常有用,而位置符号只能从右到左省略。

PostgreSQL同样支持位置与命名符号结合的mixed符号.

在这种情况下,先写位置符号,再写命名符号。

下例说明了这三种符号的使用,首先如下定义函数:

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参数来决定使用大写或小写。

相比之下,剩下的函数定义就不重要了。

可参阅Chapter 35获得更多资料。

4.3.1. 使用positional符号

在PostgreSQL中,位置符号是传统的,将参数传递给函数的机制。如下例:

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,这样,输出结果就为小写。

在位置符号中,只要参数带有缺省值,那么可以从右到左忽略。

4.3.2. 使用named符号

对命名符号,每个参数的名子用:=进行声明,以与参数表达式分开。如:

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

concat_lower_or_upper

-----------------------

hello world

(1 row)

同样,uppercase参数被忽略,从而使用缺省值。

使用命名参数的一个好处是,参数可以以任意顺序声明,如:

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)

4.3.3. 使用mixed符号

该符号是位置和命名符号的组合,然而,正如已提到的,命名符号不能在位置符号之前,如:

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

concat_lower_or_upper

-----------------------

HELLO WORLD

(1 row)

在上面所有的查询中,a和b参数被声明为positional型,而uppercase被声明为name型。

那些带有默认值,名或混合符号的复杂的具有许多参数的函数可以极大的节省写进程,并且降低错误几率。

php执行postgresql中的函数,4.3. 调用函数 - [ PostgreSQL 手册 ] - 在线原生手册 - php中文网...相关推荐

  1. lg函数c语言表达式,lgammal - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

    在头文件中定义float       lgammaf( float arg );(1)(since C99) double      lgamma( double arg );(2)(since C9 ...

  2. jsp中php代码格式化,JSP 语法 - [ JSP参考手册 ] - 在线原生手册 - php中文网

    JSP 语法 本小节将会简单地介绍一下JSP开发中的基础语法. 脚本程序 脚本程序可以包含任意量的Java语句.变量.方法或表达式,只要它们在脚本语言中是有效的. 脚本程序的语法格式: 或者,您也可以 ...

  3. c语言 acos函数,acos - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

    在头文件中定义float       acosf( float arg );(1)(since C99) double      acos( double arg );(2) long double ...

  4. php中的lc_time,LC_TIME - [ C语言中文开发手册 ] - 在线原生手册 - php中文网

    在头文件中定义#define LC_ALL / *实现定义* / #define LC_COLLATE / *实现定义* / #define LC_CTYPE / *实现定义* / #define L ...

  5. java zlib 位运算_Zlib 函数 - [ php中文手册 ] - 在线原生手册 - php中文网

    用户评论: [#1] Robin Skoglund [2008-04-04 16:39:06] ini_set('zlib.output_compression', 'On') doesn't wor ...

  6. 从Python中的另一个文件调用函数

    本文翻译自:Call a function from another file in Python Set_up: I have a .py file for each function I need ...

  7. 函数调用通过函数名字符串调用函数【C语言版】

    在写这篇文章之前,xxx已经写过了几篇关于改函数调用主题的文章,想要了解的朋友可以去翻一下之前的文章 问题引入 在C中,函数先定义,后使用.举个简单的例子 /********************* ...

  8. 通过函数名字符串调用函数【C语言版】

    问题引入 在C中,函数先定义,后使用.举个简单的例子 /************************ * add by oscar999 ************************/ fun ...

  9. 正确理解以下名词及其含义:(1)源程序,目标程序,可执行程序(2)程序编辑,程序编译,程序连接(3)程序,程序模块,程序文件 (4)函数,主函数,被调用函数,库函数

    正确理解以下名词及其含义: (1)源程序,目标程序,可执行程序. ​ 源程序:指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令 ​ 目标程序:为源程序经编译可直接被 ...

  10. 函数,主函数,被调用函数,库函数。

    函数:将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,来完成一定功能 主函数:又称main函数,是程序执行的起点 被调用函数:由一个函数调用另一个函数,则称第二个函数为被调用函数 库函数: ...

最新文章

  1. 聊聊SwitchUserFilter的使用
  2. Ubuntu下安装JDK1.7
  3. vc项目中加载多个lib遇到的问题
  4. 存储引擎-存储结构之一:行
  5. 采样方法---吉布斯采样
  6. mysql 开发进阶篇系列 22 磁盘I/O问题(从linux操作系统上优化)
  7. CSDN专家分和博客系统积分获得规则!
  8. 三星发布A60 元气版:骁龙675 售价1499元
  9. 48.本地Hyper-V虚拟机的异地(Azure)容灾(下)
  10. UE4分支的Git Flow
  11. 如何把网易云音乐ncm格式转换成mp3格式---记一下
  12. 模拟电路笔记(一)晶体二极管及其应用
  13. 用Pandas做透视表
  14. 浪潮HF系列闪存存储:不仅看性能,更看整体表现
  15. 云计算 第四章 微软云计算 Windows Azure
  16. [附源码]计算机毕业设计Python的连锁药店销售管理系统(程序+源码+LW文档)
  17. 《浏览器工作原理与实践》学习笔记
  18. bootstrap表头如何展示不动_bootstrap-table实现表头固定以及列固定
  19. 做程序员你需要明白这九件事
  20. matplotlib绘制线性回归y=kx+b参数的损失函数等高线图

热门文章

  1. linux下anjuta_[分享] Linux下用Anjuta写个Hello World 的C++程序竟如此简单!
  2. HTML5海报生成器源码,原生js小项目 - canvas海报生成器
  3. 特朗普启动美国AI国家计划,人工智能角逐再添新变化!
  4. 深度可分离卷积组卷积
  5. 微软资深副总裁洪小文:人工智能十年预测(演讲全文、61PPT)
  6. 「行业化、产业化、专业化」,解析中科曙光眼中的大数据现状和未来...
  7. matlab imrotate中心,MATLAB imrotate函数的用法
  8. 机械能计算机实验教案,学生实验:用DIS研究机械能守恒教案3
  9. 联想微型计算机的摄像头驱动,Lenovo EasyCamera 联想摄像头驱动
  10. 提供多种版本- MSI Code条形码字体具有可扩充性条形码控件MSI Plessey