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() 函数接受两个参数: a和b , 并返回一个数字。
两个参数的数据类型都是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 (低)。
在函数内部,我们使用GREATEST和LEAST内置函数获得三个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);
输出: