📜  PostgreSQL – 用户定义函数

📅  最后修改于: 2022-05-13 01:57:15.528000             🧑  作者: Mango

PostgreSQL – 用户定义函数

PostgreSQL 使用 CREATE FUNCTION 语句来开发用户定义的函数。

Syntax: 
CREATE FUNCTION function_name(p1 type, p2 type)
 RETURNS type AS
BEGIN
 -- logic
END;
LANGUAGE language_name;

我们来分析一下上面的语法:

  • 首先,在CREATE FUNCTION关键字之后指定函数的名称
  • 然后,将逗号分隔的参数列表放在函数名称后面的括号内。
  • 接下来,在RETURNS关键字后指定函数的返回类型
  • 之后,将代码放在BEGINEND块中。该函数始终以分号 (;) 结尾,后跟END关键字。
  • 最后,指出函数的过程语言,例如,如果使用 PL/pgSQL,则为plpgsql

示例 1:

在本例中我们将开发一个名为inc的非常简单的函数它将整数加 1 并返回结果。

首先,启动 pgAdmin 并连接到dvdrental 示例数据库



其次,输入以下命令创建inc函数。

CREATE FUNCTION inc(val integer) RETURNS integer AS $$
BEGIN
RETURN val + 1;
END; $$
LANGUAGE PLPGSQL;

第三,点击执行按钮来创建函数:

您提供给 CREATE FUNCTION 的整个函数定义必须是单引号字符串。这意味着如果函数有任何单引号 ('),你必须转义它。

幸运的是,从 8.0 版本开始,PostgreSQL 提供了一个称为美元引用的功能,它允许您选择一个合适的字符串,该字符串不会出现在函数,这样您就不必对其进行转义。一美元的报价是$字符之间的字符串。

如果函数有效,PostgreSQL 将创建函数并返回 CREATE FUNCTION 语句,如上所示。

让我们测试 inc函数。

您可以调用任何内置函数一样调用inc函数,如下所示:



SELECT inc(20);

SELECT inc(inc(20));

它按预期工作。

使用 pgAdmin 创建函数:

n PostgreSQL,具有不同参数的函数可以共享相同的名称。这称为函数重载,类似于 C++ 或Java的函数重载。

我们可以创建一个名为 inc 的新函数,它接受两个参数。在函数,我们将通过第二个参数增加第一个参数的值。

以下步骤向您展示如何从 pgAdmin 创建函数。

首先,启动 pgAdmin 并连接到dvdrental数据库。

其次,右键单击Functions并选择Create > 函数...菜单项。将显示一个新窗口。

三、在函数名中输入inc:



四、在定义中 选项卡,单击 + 按钮添加两个参数i val 使用bigint 作为数据类型。

在同一选项卡中的第五个将语言更改为plpgsql:

现在是定义函数了,切换到代码选项卡并定义它,如下所示:

六、点击SQL标签查看生成的代码,点击保存按钮创建函数:

第七,在像Security和Options里有更多的选项。但是,我们现在只需要基本选项。该函数可能不会显示在函数列表中。要查看新的inc函数,请右键单击Functions并单击Refresh...菜单项:

这是新的 inc函数:

现在让我们使用以下查询测试该函数:

SELECT inc(10, 20);

输出: