PostgreSQL:带数组参数的函数
PostgreSQL: function with array argument
我第一次尝试在 PostgreSQL 中创建函数:
此函数必须接受数组类型的参数。数组包含双整数值序列。数组的大小不是任意的,而是预先知道的。
create function get_total (cols ARRAY) returns biginteger AS
$BODY$
begin
// Some logics
end;
$BODY$
查询中的用法
select
stats.value1,
stats.value2,
get_total(array_agg(ARRAY[stats.value2, stats.value1]))
from stats;
它returns错误:
type cols[] does not exist
SQL state: 42704
当我在 Select 中 运行 只有 array_agg(ARRAY[stats.value2, stats.value1]) 时,我看到,该数组创建成功。所以函数参数的问题。
我做错了什么?
您必须将参数声明为 bigint[]
,它读取类型为 bigint
的数组,例如
CREATE OR REPLACE FUNCTION get_total (bigint[])
RETURNS bigint AS
$$
BEGIN
-- your fancy logic goes here
END;
$$ LANGUAGE plpgsql
函数调用:
SELECT get_total(ARRAY[1111111111111,1111111111111]);
一个优雅的替代方法是将参数声明为 VARIADIC
。这样做你可以用多个参数调用你的函数,例如:
CREATE OR REPLACE FUNCTION get_total (VARIADIC bigint[])
RETURNS bigint AS
$$
BEGIN
-- your fancy logic goes here
END;
$$ LANGUAGE plpgsql;
函数调用:
SELECT get_total(1111111111111,1111111111111,1111111111111);
演示:db<>fiddle
语法 cols ARRAY
与 cols[]
相同,表示“具有 cols
类型元素的数组”。这就是您收到函数定义错误消息的原因。
如果元素类型是bigint
,函数应该定义为
CREATE FUNCTION get_total(cols bigint ARRAY) RETURNS bigint
我第一次尝试在 PostgreSQL 中创建函数:
此函数必须接受数组类型的参数。数组包含双整数值序列。数组的大小不是任意的,而是预先知道的。
create function get_total (cols ARRAY) returns biginteger AS
$BODY$
begin
// Some logics
end;
$BODY$
查询中的用法
select
stats.value1,
stats.value2,
get_total(array_agg(ARRAY[stats.value2, stats.value1]))
from stats;
它returns错误:
type cols[] does not exist
SQL state: 42704
当我在 Select 中 运行 只有 array_agg(ARRAY[stats.value2, stats.value1]) 时,我看到,该数组创建成功。所以函数参数的问题。
我做错了什么?
您必须将参数声明为 bigint[]
,它读取类型为 bigint
的数组,例如
CREATE OR REPLACE FUNCTION get_total (bigint[])
RETURNS bigint AS
$$
BEGIN
-- your fancy logic goes here
END;
$$ LANGUAGE plpgsql
函数调用:
SELECT get_total(ARRAY[1111111111111,1111111111111]);
一个优雅的替代方法是将参数声明为 VARIADIC
。这样做你可以用多个参数调用你的函数,例如:
CREATE OR REPLACE FUNCTION get_total (VARIADIC bigint[])
RETURNS bigint AS
$$
BEGIN
-- your fancy logic goes here
END;
$$ LANGUAGE plpgsql;
函数调用:
SELECT get_total(1111111111111,1111111111111,1111111111111);
演示:db<>fiddle
语法 cols ARRAY
与 cols[]
相同,表示“具有 cols
类型元素的数组”。这就是您收到函数定义错误消息的原因。
如果元素类型是bigint
,函数应该定义为
CREATE FUNCTION get_total(cols bigint ARRAY) RETURNS bigint