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;

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

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

文章评论

0条评论