PostgreSQL - 函数

  • 简述

    PostgreSQL functions,也称为存储过程,允许您在数据库中的单个函数中执行通常需要多次查询和往返的操作。函数允许数据库重用,因为其他应用程序可以直接与您的存储过程交互,而不是中间层或重复代码。
    可以使用您选择的语言创建函数,例如 SQL、PL/pgSQL、C、Python 等。
  • 句法

    创建函数的基本语法如下 -
    
    CREATE [OR REPLACE] FUNCTION function_name (arguments) 
    RETURNS return_datatype AS $variable_name$
       DECLARE
          declaration;
          [...]
       BEGIN
          < function_body >
          [...]
          RETURN { variable_name | value }
       END; LANGUAGE plpgsql;
    
    在哪里,
    • function-name指定函数的名称。
    • [OR REPLACE] 选项允许修改现有功能。
    • 该函数必须包含一个return陈述。
    • RETURN子句指定要从函数返回的数据类型。这return_datatype可以是基类型、复合类型或域类型,也可以引用表列的类型。
    • function-body包含可执行部分。
    • AS 关键字用于创建独立函数。
    • plpgsql是实现函数的语言的名称。这里,我们为PostgreSQL使用这个选项,它可以是SQL,C,内部,或者用户定义的过程语言的名称。为了向后兼容,名称可以用单引号括起来。
  • 例子

    以下示例说明了创建和调用独立函数。此函数返回 COMPANY 表中的记录总数。我们将使用 COMPANY 表,该表具有以下记录 -
    
    testdb# select * from COMPANY;
     id | name  | age | address   | salary
    ----+-------+-----+-----------+--------
      1 | Paul  |  32 | California|  20000
      2 | Allen |  25 | Texas     |  15000
      3 | Teddy |  23 | Norway    |  20000
      4 | Mark  |  25 | Rich-Mond |  65000
      5 | David |  27 | Texas     |  85000
      6 | Kim   |  22 | South-Hall|  45000
      7 | James |  24 | Houston   |  10000
    (7 rows)
    
    函数 totalRecords() 如下 -
    
    CREATE OR REPLACE FUNCTION totalRecords ()
    RETURNS integer AS $total$
    declare
        total integer;
    BEGIN
       SELECT count(*) into total FROM COMPANY;
       RETURN total;
    END;
    $total$ LANGUAGE plpgsql;
    
    执行上述查询时,结果将是 -
    
    testdb# CREATE FUNCTION
    
    现在,让我们调用这个函数并检查 COMPANY 表中的记录
    
    testdb=# select totalRecords();
    
    执行上述查询时,结果将是 -
    
     totalrecords
    --------------
          7
    (1 row)