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 ARRAYcols[] 相同,表示“具有 cols 类型元素的数组”。这就是您收到函数定义错误消息的原因。

如果元素类型是bigint,函数应该定义为

CREATE FUNCTION get_total(cols bigint ARRAY) RETURNS bigint