PostgreSQL Functions PostgreSQL Not-Null Constraint PostgreSQL Alias PostgreSQL Functions 在本节中,我们将了解PostgreSQL Functions的工作原理**,创建Functions命令,并查看使用 PostgreSQL 的不同工具(例如pgadmin4和SQL 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_from和Price_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步 之后,我们将通过单击“查询工具”后面的“工具”部分来打开查询工具,如下面的屏幕截图所示: Step3 要创建get_car_Price1()Functions,我们将在查询工具中使用上述代码并单击“执行”按钮。 执行上述命令后,我们将得到以下消息窗口,显示Functionsget_car_Price1()已成功创建到类似数据库中。 而且,我们可以 在Functions列表中识别Functionsget_car_Price(),如下面的屏幕截图所示: 注意:如果我们无法识别Functions名称,我们可以右键单击Functions节点并选择Refresh...菜单项来恢复Functions列表: 使用 SQL Shell(psql) 创建Functions 我们将按照以下过程在psql 中创建表: 步骤1 首先,我们将在本地系统中打开psql,然后我们将连接到我们要创建Functions的数据库。 我们将在javatpoint数据库中创建一个表,我们之前在 PostgreSQL 教程中创建了该表。 第2步 为了连接数据库,我们将输入以下命令: \c javatpoint 输出 执行上述命令后,我们将得到以下输出: 注意:如果我们输入与上面类似的命令来创建一个Functions,在 psql 中,它会发出以下错误:Functions get_car_price 已经存在,具有相同的参数类型。 因此,为了解决这个错误,我们在下一步中创建了一个新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已成功创建。 第四步 我们可以使用以下命令列出现有数据库中的所有用户定义Functions。 javatpoint=# \df 输出 执行上述命令后,我们将得到以下输出: 如何调用用户定义的Functions 在PostgreSQL中,我们可以通过三种方式调用用户自定义Functions,分别如下: Positional notation Named notation The mixed notation 使用位置符号调用Functions 如果我们想以与参数类似的顺序描述参数,我们可以在位置符号的帮助下调用一个Functions。 让我们看一个示例示例,以了解用于调用特定Functions的位置表示法。 在下面的示例中,get_car_price()参数是26000和70000,这相当于Price_from和Price_to参数。 Select get_car_Price(26000,70000); 输出 我们将在执行上述命令时获得以下输出,该命令检索car_price介于26000 到 70000之间的四行**。** 当Functions几乎没有任何参数时,我们可以借助位置符号来调用Functions。 如果Functions包含多个参数,我们可以使用命名符号来调用特定的Functions,因为使用命名符号会使Functions调用更容易理解。 使用命名符号调用Functions 在下面的例子中,我们展示了使用命名符号调用get_car_Price()Functions的工作: select get_car_Price( Price_from => 26000, Price_to => 70000 ); 输出 我们将在执行上述命令时获得以下输出,该输出基于上述car_price范围显示四行。 在前面提到的符号中,我们使用=>来区分参数的name 和 value。 PostgreSQL 允许在 := 上创建旧语法以实现向后兼容性,正如我们在以下命令中看到的: select get_car_Price( Price_from := 26000, Price_to := 70000 ); 输出 执行上述命令后,我们将获得与上述命令的结果类似的输出,其中我们使用 ' =>'而不是':='。 使用混合符号调用Functions 它是位置和命名符号的分组。 让我们看一个示例示例,以了解使用混合符号调用Functions的工作原理。 在混合符号中,我们不能在位置参数之前使用命名**参数**。 例如: 在下面的命令,我们将使用命名概念为Price_from参数作为Price_from => 26000,而对于Price_to参数,我们已经使用了位置概念如70000,因为我们可以在下面的命令看到: select get_car_Price(Price_from=>26000,70000); 输出 执行上述命令后,PostgreSQL 引发错误,表示位置参数不能跟随命名参数。 为了解决上述错误,我们对 get_car_price()Functions使用位置和命名符号,其中26000用于表示位置符号;另一方面,Price_to=>70000用于表示命名符号: select get_car_Price(26000,Price_to=>70000); 输出 执行上述命令后,我们将得到以下输出,它返回那些car_price介于 26000 到 70000 之间的汽车。 概述 在PostgreSQL Functions部分,我们学习了以下主题: 我们已经使用CREATE Function命令为特定的表创建了一个用户定义的Functions。 我们已经了解了在诸如Positional、Named 和 Mixed等不同符号的帮助下调用用户定义Functions的过程。 PostgreSQL Not-Null Constraint PostgreSQL Alias