首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PostgreSQL:带数组参数的函数

PostgreSQL:带数组参数的函数
EN

Stack Overflow用户
提问于 2021-11-03 13:07:28
回答 2查看 43关注 0票数 1

这是我第一次尝试用PostgreSQL创建函数:

此函数必须接受数组类型的参数。数组包含一系列的大整数值。数组的大小不是任意的,而是预先知道的。

代码语言:javascript
运行
复制
 create function get_total (cols ARRAY) returns biginteger AS
   $BODY$
       begin 
         // Some logics 
       end;
   $BODY$ 

查询中的用法

代码语言:javascript
运行
复制
 select 
     stats.value1, 
     stats.value2,
     get_total(array_agg(ARRAY[stats.value2, stats.value1])) 
 from stats;

它返回错误:

代码语言:javascript
运行
复制
 type cols[] does not exist
 SQL state: 42704

当我在Select only array_agg(ARRAYstats.value2,stats.value1)中运行时,我看到该数组已成功创建。所以函数参数的问题。

我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-03 13:16:19

您必须将参数声明为bigint[],它读取bigint类型的数组,例如

代码语言:javascript
运行
复制
CREATE OR REPLACE FUNCTION get_total (bigint[]) 
RETURNS bigint AS
$$
BEGIN
 -- your fancy logic goes here
END;
$$ LANGUAGE plpgsql

函数调用:

代码语言:javascript
运行
复制
SELECT get_total(ARRAY[1111111111111,1111111111111]); 

一种很好的替代方法是将参数声明为VARIADIC。这样,您可以使用多个参数调用您的函数,例如:

代码语言:javascript
运行
复制
CREATE OR REPLACE FUNCTION get_total (VARIADIC bigint[]) 
RETURNS bigint AS
$$
BEGIN  
 -- your fancy logic goes here
END;
$$ LANGUAGE plpgsql;   

函数调用:

代码语言:javascript
运行
复制
SELECT get_total(1111111111111,1111111111111,1111111111111); 

演示:db<>fiddle

票数 1
EN

Stack Overflow用户

发布于 2021-11-03 13:40:45

cols ARRAY的语法与cols[]相同,意思是“一个具有cols类型元素的数组”。这就是为什么您会收到函数定义错误消息。

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

代码语言:javascript
运行
复制
CREATE FUNCTION get_total(cols bigint ARRAY) RETURNS bigint
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69825388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档