这是我第一次尝试用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;它返回错误:
type cols[] does not exist
SQL state: 42704当我在Select only array_agg(ARRAYstats.value2,stats.value1)中运行时,我看到该数组已成功创建。所以函数参数的问题。
我做错了什么?
发布于 2021-11-03 13:16:19
您必须将参数声明为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
发布于 2021-11-03 13:40:45
cols ARRAY的语法与cols[]相同,意思是“一个具有cols类型元素的数组”。这就是为什么您会收到函数定义错误消息。
如果元素类型为bigint,则函数应定义为
CREATE FUNCTION get_total(cols bigint ARRAY) RETURNS biginthttps://stackoverflow.com/questions/69825388
复制相似问题