PostgreSQL教程

PostgreSQL 函数

在本节中,我们将了解 PostgreSQL函数的工作原理,创建函数命令并查看实时信息。使用不同的PostgreSQL工具(例如 pgadmin4 和 SQL Shell(PSQL))的 PostgreSQL CREATE FUNCTION命令示例。
并参见调用用户定义函数的示例,例如位置表示法notation,混合表示法。

什么是PostgreSQL函数?

PostgreSQL 函数或存储过程是存储在数据库服务器上的一组SQL和过程命令,例如声明,赋值,循环,控制流等,并且可以使用 SQL接口来参与。它也称为 PostgreSQL存储过程。
我们可以使用服务语言(例如 SQL , PL/pgSQL ,C , Python 等。
它使我们能够执行操作,这些操作通常会在数据库中的函数中执行各种命令和往返操作。

什么是PostgreSQL CREATE Function命令?

在PostgreSQL中,如果要指定新的用户定义函数,则可以使用 CREATE FUNCTION 命令。

PostgreSQL CREATE Function命令

PostgreSQL CREATE Function命令的语法如下:
CREATE [OR REPLACE] FUNCTION function_name (arguments)   
RETURNS return_datatype 
LANGUAGE plpgsql
AS $variable_name$  
DECLARE  
declaration;  
[...]--variable declaration 
 BEGIN  
< function_body >  
[...] --logic
return { variable_name | value }  
END; 
$
在上面的语法中,我们使用了以下参数,如下表所示:
参数 说明
function_name 功能名称参数用于定义功能名称。 函数名称写在 CREATE FUNCTION 关键字之后。
[OR REPLACE] 如果要更改当前功能,可以使用 OR REPLACE 关键字。 这是一个可选参数。
FUNCTION 使用 OR REPLACE 关键字后,我们可以定义 function 参数列表,该列表位于 Function Name之后的括号中。 一个函数可以包含零个或多个参数。
RETURNS 我们可以在关键字 RETURN 之后定义数据类型,该数据类型将从函数中返回。 它可以是基本类型,复合类型或域类型或表列类型的引用。
LANGUAGE plpgsql 用于定义执行该功能的过程语言的名称。 不仅仅是 plpgsql ,PostgreSQL支持多种过程语言。
Function_body function_body 包含逻辑的可执行部分。

PostgreSQL创建函数命令的示例

让我们看一个不同的示例来了解 PostgreSQL CREATE Function 命令的工作。
我们从PostgreSQL教程中创建的 lidihuo 数据库中提取 Car 表。

创建新功能

在下面的命令中,我们将创建一个新功能,该功能将 Cars 的 Car_Price Price_from和Price_to 参数:
Create function get_car_Price(Price_from int, Price_to int)
returns int
language plpgsql
as
$
Declare
 Car_count integer;
Begin
   select count(*) 
   into Car_count
   from Car
   where Car_price between Price_from and Price_to;
   return Car_count;
End;
$;
get_car_Price 函数分为两个主要部分,分别为 Header和Function Body 。
我们在标题部分:
我们首先将函数名称指定为 get_car_Price(),是在 create function之后编写的 此后, get_car_Price()函数包含两个参数 Price_from 和 Price_to ,它们的数据类型为整数。 然后, get_car_Price()函数检索由return int条件定义的整数。 最后,我们将函数语言用作 plpgsql 。
我们在功能主体部分中使用了以下参数:
我们在功能部分使用了带引号的字符串常量插图,该插图以 $$ 开头,以 $$ 结尾。 在 $$ 号之间,我们可以放置一个块,其中覆盖了声明和函数的逻辑。 在声明块中,我们声明了一个名为 Car_count 的变量,该变量存储了从 Car 中选择的汽车 在街区部分的正文中,我们使用了 SELECT INTO 命令选择值在 Price_from和Price_to 之间的汽车价格,并将输出提供给 Car_count 在代码块的末尾,我们使用了 RETURN 命令来获取

在PostgreSQL中创建函数

在PostgreSQL中,我们可以通过两种方式创建函数:
使用pgAdmin的PostgreSQL创建函数 PostgreSQL使用SQL Shell创建函数

使用pgAdmin创建PostgreSQL函数

我们将按照以下过程在 pgAdmin中创建函数:
Step1
首先,我们将在本地系统中打开最新版本的 pgAdmin ,然后转到对象树并连接到我们要在其中创建函数的 lidihuo 示例数据库。
Step2
此后,我们将打开查询通过点击查询工具紧随其后的工具部分,我们可以在下面的屏幕截图中看到:
 PoatgreSQL Function2
Step3
要创建 get_car_Price1()函数,我们将在查询中使用以上代码工具,然后点击执行按钮。
执行上述命令后,我们将获得以下消息窗口,其中显示了已成功 get_car_Price1()创建成功到类似的数据库中。
PoatgreSQL Function
而且,我们可以在 Function 列表中标识函数 get_car_Price(),如下面的屏幕快照所示:
PoatgreSQL Function
注意: 如果我们无法识别函数名称,则可以右键单击"函数"节点,然后选择"刷新..."菜单项以恢复函数列表:
PoatgreSQL Function

使用SQL Shell(psql)创建函数

我们将按照以下过程在 psql 中创建表:
Step1
首先,我们将在本地系统中打开 psql ,然后连接到要创建函数的数据库。 我们将在我们先前在PostgreSQL教程中创建的 lidihuo 数据库中创建一个表。
Step2
要连接数据库,我们将输入以下命令:
\c lidihuo
输出
执行上述命令后,我们将获得以下输出:
PoatgreSQL Function
注意: 如果我们输入与上述类似的命令来创建函数,则在psql中,它将发出以下错误,即: 函数get_car_price已经存在相同的参数类型。
PoatgreSQL Function
因此,要解决此错误,我们创建了一个新函数,下一步执行strong> get_car_Price1 ()。
Step3
我们将在下面输入以下命令在 lidihuo 数据库中创建功能 as get_car_Price1 ()。
lidihuo=# Create function get_car_Price1(Price_from int, Price_to int)
lidihuo-# returns int
lidihuo-# language plpgsql
lidihuo-# as
lidihuo-# $
lidihuo$# Declare
lidihuo$#  Car_count integer;
lidihuo$# Begin
lidihuo$#    select count(*)
lidihuo$#    into Car_count
lidihuo$#    from Car
lidihuo$#    where car_price between Price_from and Price_to;
lidihuo$#    return Price_count;
lidihuo$# End;
lidihuo$# $;
输出
在执行上述命令时,我们将获得以下输出,该命令显示 get_car_Price_count1()函数已成功创建。
PoatgreSQL Function
Step4
使用以下命令列出现有数据库中的所有用户定义函数。
lidihuo=# \df
输出
执行上述命令后,我们将获得以下输出:
PoatgreSQL Function

如何调用用户定义的函数

在PostgreSQL中,我们可以通过三种方式调用用户定义的函数,即如下:
位置标记 命名符号 混合符号

使用位置表示法调用函数

如果我们想以与参数相似的顺序描述参数,则可以使用 positional表示法的帮助。
让我们看一个示例示例,以了解位置表示法在调用特定函数时的作用。
在下面的示例中, get_car_price()参数为 26000 和 70000 ,它们分别与 Price_from 和 Price_to 参数。
Select get_car_Price(26000,70000);
输出
在实现上述命令时,我们将获得以下输出,该命令检索 car_price 在之间的那四行26000到70000。
PoatgreSQL Function
当函数几乎没有任何参数时,我们可以借助位置符号调用函数。
如果函数包含多个参数,我们可以使用命名符号来调用特定函数因为使用命名符号将使函数调用更易于理解。

使用命名符号调用函数

在下面的示例中,我们正在显示使用命名符号调用 get_car_Price()函数的工作:
select get_car_Price(
 Price_from => 26000, 
    Price_to => 70000
);
输出
执行上述命令后,我们将得到以下输出,该命令根据上述 car_price 的范围显示四行。
PoatgreSQL Function
在前面提到的符号中,我们使用了 => 区分参数的名称和值。
PostgreSQL允许在<=> 上创建的较早语法,以实现向后兼容 ,如下面的命令所示:
select get_car_Price(
 Price_from := 26000, 
     Price_to := 70000
);
输出
执行以上命令后,与使用' =>'而不是': ='。
PoatgreSQL Function

使用混合符号调用函数

这是位置和命名符号的分组。
让我们看一个示例示例来理解使用混合符号调用函数的工作。
在混合符号中,我们不能使用命名参数在位置参数之前。
例如:
在以下命令中,我们将使用命名概念,将 Price_from 参数设置为 Price_from => 26000 ,而对于 Price_to 参数,我们使用了名词概念为 70000 ,如下面的命令所示:
select get_car_Price(Price_from=>26000,70000);
输出
执行上述命令后,PostgreSQL引发错误,表明位置参数不能跟随命名参数。
PoatgreSQL Function
为解决上述错误,我们使用了位置和命名符号 ,其中 26000 用于表示位置表示法; ,另一方面, Price_to = > 70000 用于表示命名符号:
select get_car_Price(26000,Price_to=>70000);
输出
执行上述命令后,我们将获得以下输出,该输出返回 car_price 在26000至70000之间的汽车。
PoatgreSQL Function

概述

在PostgreSQL函数部分,我们学习了以下主题:
我们已使用 CREATE Function (创建函数)命令为特定表创建用户定义的函数。 我们已经理解了调用用户定义函数的过程,这些过程借助 Positional,Named和Mixed等不同符号表示。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4