PostgreSQL创建自定义函数

2023年 8月 15日 20.6k 0

PostgreSQL 支持创建自定义函数,相比于 SQL 对表进行简单增删改查操作,自定义函数能够实现各种复杂的逻辑。PostgreSQL 自定义函数支持的语法主要包括 SQL,plsql,C语言函数等。

1. 创建函数的语法

CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| { IMMUTABLE | STABLE | VOLATILE }
| [ NOT ] LEAKPROOF
| { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
| { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER }
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SUPPORT support_function
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...

2. 创建 SQL 类型的函数

下面的示例是创建一个名为 myadd 的函数,开发语言为 SQL,功能是实现两个整数相加,计算相加后的结果并返回。

CREATE FUNCTION myadd(integer, integer) RETURNS integer
AS 'select $1 + $2;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;

调用函数:

postgres=# select * from myadd(10,20);
myadd
-------
30
(1 row)

3. 创建 plsql 类型的函数

下面示例是创建一个名为 myincrement 的函数,开发语言为 plsql,功能是实现一个整数自增,并将自增后的结果返回。

CREATE OR REPLACE FUNCTION myincrement(i integer) RETURNS integer AS $$
BEGIN
RETURN i + 1;
END;
$$ LANGUAGE plpgsql;

调用函数:

postgres=# select * from myincrement(10);
myincrement
-------------
11

4. 创建一个返回 2 个字段的函数

下面这个创建一个名为 mydum 的函数,开发语言为 SQL,入参为一个整数,返回结果是一个包含 2 个字段的表记录,如下:

CREATE FUNCTION mydup(int) RETURNS TABLE(f1 int, f2 text)
AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$
LANGUAGE SQL;

调用函数:

postgres=# select mydup(10);
mydup
-------------------
(10,"10 is text")
(1 row)

5. 删除函数

drop function myincrement;
drop function myadd;
drop function if exists mydup;

更多函数相关语法,请参考链接:

https://www.postgresql.org/docs/13/sql-createfunction.html

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论