PostgreSQL - 函数

PostgreSQL 函数,也称为存储过程,允许您执行通常在数据库中的单个函数中进行多次查询和往返的操作.函数允许数据库重用,因为其他应用程序可以直接与存储过程交互,而不是中间层或重复代码.

可以用您选择的语言创建函数,如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;

其中,

  • 功能-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)