PL/pgSQL从入门到放弃(3)-函数
2020-02-29 本文已影响0人
小刘先生
本文由 @小刘先森 原创,转载请注明出处。
PL/pgSQL系列文章,方便小伙伴们学习。
PL/pgSQL从入门到放弃(1)-入门
PL/pgSQL从入门到放弃(2)-变量定义与数据类型
PL/pgSQL从入门到放弃(3)-函数
PL/pgSQL从入门到放弃(4)-函数返回各种常用数据类型
PL/pgSQL从入门到放弃(5)-控制结构
PL/pgSQL从入门到放弃(6)-游标
函数声明
通过执行CREATE FUNCTION命令,以PL/pgSQL写成的函数可以被定义到服务器中。
CREATE or REPLACE FUNCTION somefunc(integer, text) RETURNS integer
AS 'function body text'
LANGUAGE plpgsql;
PL/pgSQL是一种块结构的语言。一个块被定义为:
[ <<label>> ]
[ DECLARE
declarations
BEGIN
statements
END [ label ];
目前CREATE FUNCTION
函数体就是简单的一个字符串。通常在写函数体时,使用美元符号引用通常比使用普通单引号语法更有帮助。如果没有美元引用,函数体中的任何单引号或者反斜线必须通过双写来转义。
推荐写法如下:
CREATE FUNCTION somefunc(integer, text) RETURNS integer AS $$
DECLARE
BEGIN
END;
$$ LANGUAGE plpgsql;
函数参数
声明函数参数被命名为标识符$1、$2等等。可选地,能够为$n参数名声明别名来增加可读性。不管是别名还是数字标识符都能用来引用参数值。
数字标识函数参数
CREATE FUNCTION hello(varchar) RETURNS varchar AS $$
DECLARE
BEGIN
RETURN '你好,' || $1;
END;
$$ LANGUAGE plpgsql;
示例结果:
<font size='2px' color='#E7876B'>小刘先森为作者名字</font>
hello结果
别名函数参数
- 创建函数时为参数给定一个名称(推荐)
CREATE FUNCTION hello(name varchar) RETURNS varchar AS $$
DECLARE
BEGIN
RETURN '你好,' || name ;
END;
$$ LANGUAGE plpgsql;
- 显式地使用声明语法声明一个别名
CREATE FUNCTION hello(varchar) RETURNS varchar AS $$
DECLARE
name ALIAS FOR $1;
BEGIN
RETURN '你好,' || name ;
END;
$$ LANGUAGE plpgsql;
函数返回
-
returns
返回
示例函数就使用returns
返回了一个varchar
类型的值。
CREATE FUNCTION hello(name varchar) RETURNS varchar AS $$
DECLARE
BEGIN
RETURN '你好,' || name ;
END;
$$ LANGUAGE plpgsql;
-
输出参数返回
输出参数在返回多个值时很有用。在定义函数时使用OUT
关键字标识返回参数。示例如下:
CREATE FUNCTION sum_n_product(x int, y int, OUT sum int, OUT prod int) AS $$
BEGIN
sum := x + y;
prod := x * y;
END;
$$ LANGUAGE plpgsql;
<font color='red'>输出结果如下:</font>
示例函数的结果实际上创建了一个匿名记录类型。如果使用
RETURNS
返回,它必须是RETURNS record
。使用RETURNS record
返回写法如下:
CREATE or replace FUNCTION sum_n_product(x int, y int) returns record AS $$
DECLARE
r_data record;
sum int;
prod int;
BEGIN
sum := x + y;
prod := x * y;
r_data = (sum , prod );
return r_data;
END;
$$ LANGUAGE plpgsql;
<font color='red'>输出结果如下:</font>
直接返回 按照记录方式返回结果
关于作者
大家有需要介绍哪些部分,或者一些想法欢迎联系我。
GISer
QQ: 1016817543
邮箱:1016817543@qq.com
github:https://github.com/MrSmallLiu (欢迎star)
相关链接
欢迎各位Star、Issues、PR