PostgreSQL Functions


PostgreSQL Functions

在本节中,我们将了解PostgreSQL Functions的工作原理**,创建Functions命令,并查看使用 PostgreSQL 的不同工具(例如pgadmin4SQL shell (PSQL))PostgreSQL CREATE FUNCTION 命令的实时示例。**

并参见调用用户定义Functions的示例,例如名为 notation 的位置表示法,混合表示法。

什么是 PostgreSQL Functions?

甲PostgreSQL的Functions或存储过程是一组SQL和程序命令,如的声明,作业,环路,流动的控制存储在数据库服务器上等等,并且可以使用参与的SQL接口。它也被称为PostgreSQL 存储过程

我们可以用 serval 语言创建 PostgreSQL Functions,例如,SQL、PL/pgSQL、C、[Python](https://codingdict.com/article/6322等。

它使我们能够执行操作,这些操作通常会在数据库中的Functions中执行各种命令和往返。

什么是 PostgreSQL CREATE Functions命令?

在PostgreSQL中,如果我们想指定一个新的用户自定义Functions,可以使用CREATE FUNCTION命令。

PostgreSQ CREATE Functions命令的语法

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 Functions名参数用于定义Functions名称。Functions名写在CREATE FUNCTION关键字之后。
[OR REPLACE] 如果要更改当前Functions,可以使用OR REPLACE关键字。它是一个可选参数。
Function 使用OR REPLACE关键字后,我们可以定义Functions名称后面括号中的Functions参数列表一个Functions可以包含零个或多个参数。
RETURN 我们可以在RETURN关键字之后定义数据类型,我们将从Functions中返回。它可以是表列类型的基本类型、复合类型或域类型或引用。
Language plpgsql 它用于定义执行Functions的过程语言的名称。不仅仅是plpgsql, PostgreSQL 还支持各种过程语言。
Function_body FUNCTION_BODY包含逻辑的可执行部分。

PostgreSQL 创建Functions命令示例

让我们看一个不同的例子来理解PostgreSQL CREATE Function命令的工作。

我们从PostgreSQL 教程中创建的Javatpoint数据库中获取Car\表。

创建一个新Functions

在下面的命令,我们正在创造一个新的功能,计数汽车,其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功能分为两个主要部分,其是页眉和Functions体

我们在Header部分使用了以下参数:

  • 主要是我们指定Functions名get_car_Price(),写在createFunctions之后
  • 之后,get_car_Price()Functions包含两个参数Price_fromPrice_to,具有整数数据类型。
  • 然后,get_car_Price()Functions检索由 return int 条件定义的整数。
  • 最后,我们使用了Functions语言plpgsql

我们在Functions体部分使用了以下参数:

  • 我们已经用美元引号的字符串常量说明在功能部分,它与启动$$和结束与$$
  • $$符号之间,我们可以放置一个块,它涵盖了Functions**的声明逻辑**。
  • 在声明块中,我们声明了一个名为Car_count的变量它存储从Car\
  • 在块部分的主体中,我们使用SELECT INTO命令选择值介于Price_from 和 Price_to之间的汽车的价格,并将输出提供给Car_count
  • 在块的末尾,我们使用了RETURN命令来获取

在 PostgreSQL 中创建Functions

在 PostgreSQL 中,我们可以通过两种方式创建Functions:

  • PostgreSQL 使用 pgAdmin 创建Functions
  • PostgreSQL 使用 SQL Shell 创建Functions

PostgreSQL 使用 pgAdmin 创建Functions

我们将按照以下过程在pgAdmin 中创建一个Functions

步骤1

首先,我们将在本地系统中打开最新版本的pgAdmin,然后我们将转到对象树并连接到我们要在其中创建Functions的Javatpoint示例数据库。

第2步

之后,我们将通过单击“查询工具”后面的“工具”部分来打开查询工具,如下面的屏幕截图所示:

PoatgreSQL Functions 2

Step3

要创建get_car_Price1()Functions,我们将在查询工具中使用上述代码并单击“执行”按钮。

执行上述命令后,我们将得到以下消息窗口,显示Functionsget_car_Price1()已成功创建到类似数据库中。

PoatgreSQL Functions

而且,我们可以 在Functions列表中识别Functionsget_car_Price(),如下面的屏幕截图所示:

PoatgreSQL Functions

注意:如果我们无法识别Functions名称,我们可以右键单击Functions节点并选择Refresh...菜单项来恢复Functions列表:

PoatgreSQL Functions

使用 SQL Shell(psql) 创建Functions

我们将按照以下过程在psql 中创建表:

步骤1

  • 首先,我们将在本地系统中打开psql,然后我们将连接到我们要创建Functions的数据库。
  • 我们将在javatpoint数据库中创建一个表,我们之前在 PostgreSQL 教程中创建了该表。

第2步

  • 为了连接数据库,我们将输入以下命令:
\c javatpoint

输出

执行上述命令后,我们将得到以下输出:

PoatgreSQL Functions

注意:如果我们输入与上面类似的命令来创建一个Functions,在 psql 中,它会发出以下错误:Functions get_car_price 已经存在,具有相同的参数类型。

PoatgreSQL Functions

因此,为了解决这个错误,我们在下一步中创建了一个新Functions作为get_car_Price1 ()。

Step3

我们将输入以下命令在javatpoint数据库中创建一个名为 get_car_Price1 () 的Functions

javatpoint=# Create function get_car_Price1(Price_from int, Price_to int)  
javatpoint-# returns int  
javatpoint-# language plpgsql  
javatpoint-# as  
javatpoint-# $$  
javatpoint$# Declare  
javatpoint$#  Car_count integer;  
javatpoint$# Begin  
javatpoint$#    select count(*)  
javatpoint$#    into Car_count  
javatpoint$#    from Car  
javatpoint$#    where car_price between Price_from and Price_to;  
javatpoint$#    return Price_count;  
javatpoint$# End;  
javatpoint$# $$;

输出

执行上述命令后,我们将得到以下输出,显示get_car_Price_count1()Functions已成功创建。

PoatgreSQL Functions

第四步

我们可以使用以下命令列出现有数据库中的所有用户定义Functions。

javatpoint=# \df

输出

执行上述命令后,我们将得到以下输出:

PoatgreSQL Functions

如何调用用户定义的Functions

在PostgreSQL中,我们可以通过三种方式调用用户自定义Functions,分别如下:

  • Positional notation
  • Named notation
  • The mixed notation

使用位置符号调用Functions

如果我们想以与参数类似的顺序描述参数,我们可以在位置符号的帮助下调用一个Functions。

让我们看一个示例示例,以了解用于调用特定Functions的位置表示法

在下面的示例中,get_car_price()参数是2600070000,这相当于Price_fromPrice_to参数。

Select get_car_Price(26000,70000);

输出

我们将在执行上述命令时获得以下输出,该命令检索car_price介于26000 到 70000之间的四行**。**

PoatgreSQL Functions

当Functions几乎没有任何参数时,我们可以借助位置符号来调用Functions。

如果Functions包含多个参数,我们可以使用命名符号来调用特定的Functions,因为使用命名符号会使Functions调用更容易理解。

使用命名符号调用Functions

在下面的例子中,我们展示了使用命名符号调用get_car_Price()Functions的工作:

select get_car_Price(  
 Price_from => 26000,   
    Price_to => 70000  
);

输出

我们将在执行上述命令时获得以下输出,该输出基于上述car_price范围显示四行

PoatgreSQL Functions

在前面提到的符号中,我们使用=>来区分参数的name 和 value

PostgreSQL 允许在 := 上创建旧语法以实现向后兼容性,正如我们在以下命令中看到的:

select get_car_Price(  
 Price_from := 26000,   
     Price_to := 70000  
);

输出

执行上述命令后,我们将获得与上述命令的结果类似的输出,其中我们使用 ' =>'而不是':='

PoatgreSQL Functions

使用混合符号调用Functions

它是位置和命名符号的分组。

让我们看一个示例示例,以了解使用混合符号调用Functions的工作原理。

混合符号中,我们不能在位置参数之前使用命名**参数**。

例如:

在下面的命令,我们将使用命名概念Price_from参数作为Price_from => 26000,而对于Price_to参数,我们已经使用了位置概念70000,因为我们可以在下面的命令看到:

select get_car_Price(Price_from=>26000,70000);

输出

执行上述命令后,PostgreSQL 引发错误,表示位置参数不能跟随命名参数

PoatgreSQL Functions

为了解决上述错误,我们对 get_car_price()Functions使用位置和命名符号,其中26000用于表示位置符号;另一方面,Price_to=>70000用于表示命名符号

select get_car_Price(26000,Price_to=>70000);

输出

执行上述命令后,我们将得到以下输出,它返回那些car_price介于 26000 到 70000 之间的汽车。

PoatgreSQL Functions

概述

PostgreSQL Functions部分,我们学习了以下主题:

  • 我们已经使用CREATE Function命令为特定的表创建了一个用户定义的Functions。
  • 我们已经了解了在诸如Positional、Named 和 Mixed等不同符号的帮助下调用用户定义Functions的过程