📜  PostgreSQL -函数参数

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

PostgreSQL -函数参数

PostgreSQL 有 4 种类型的函数参数,如下所示:

  • 出去
  • 进出
  • 可变参数

输入参数:

为了更好地理解这些函数参数,让我们首先定义一个函数,我们将在上面对上述函数参数进行实验,如下所示:

CREATE OR REPLACE FUNCTION get_sum(
    a NUMERIC, 
    b NUMERIC) 
RETURNS NUMERIC AS $$
BEGIN
    RETURN a + b;
END; $$

LANGUAGE plpgsql;

get_sum()  函数接受两个参数: ab 并返回一个数字。

两个参数数据类型都是NUMERIC。默认情况下,PostgreSQL 中任何参数的参数类型都是IN参数。您可以将IN参数传递给函数,但不能将它们作为结果的一部分返回。

例子:



SELECT get_sum(10, 20);

输出:

输出参数:

OUT参数被定义为函数的参数列表中的一部分,并返回作为结果的一部分。为了更好地理解,让我们定义一个函数如下:

CREATE OR REPLACE FUNCTION hi_lo(
    a NUMERIC, 
    b NUMERIC,
    c NUMERIC, 
        OUT hi NUMERIC,
    OUT lo NUMERIC)
AS $$
BEGIN
    hi := GREATEST(a, b, c);
    lo := LEAST(a, b, c);
END; $$

LANGUAGE plpgsql;

hi_lo函数接受 5 个参数:

  • 三个IN参数: a , b , c
  • 两个OUT参数: hi (高)和lo (低)。

在函数内部,我们使用GREATESTLEAST内置函数获得三个IN参数的最大和最小数量因为我们使用OUT参数,所以我们不需要RETURN语句。该OUT参数是需要,而不需要定义一个自定义类型的返回多个值的函数是有用的。

例子 :

SELECT hi_lo(10, 20, 30);

输出:



输入参数:

INOUT 参数是 IN 和 OUT 参数的组合。这意味着调用者可以向函数传递一个值。然后该函数更改参数并将值作为结果的一部分传回。

以下 square函数接受一个数字并返回该数字的平方。

CREATE OR REPLACE FUNCTION square(
    INOUT a NUMERIC)
AS $$
BEGIN
    a := a * a;
END; $$
LANGUAGE plpgsql;

例子:

SELECT square(4);

输出:

VARIADIC 参数:

一个函数可以接受可变数量的参数,条件是所有参数都具有相同的数据类型。参数作为数组传递给函数。

例子:

CREATE OR REPLACE FUNCTION sum_avg(
    VARIADIC list NUMERIC[],
    OUT total NUMERIC, 
        OUT average NUMERIC)
AS $$
BEGIN
   SELECT INTO total SUM(list[i])
   FROM generate_subscripts(list, 1) g(i);

   SELECT INTO average AVG(list[i])
   FROM generate_subscripts(list, 1) g(i);
    
END; $$
LANGUAGE plpgsql;

所述sum_avg()函数接受号的列表,计算总平均,并返回两个值。

SELECT * FROM sum_avg(10, 20, 30);

输出: