PostgreSQL创建自定义函数
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;
更多函数相关语法,请参考链接:
文章评论