postgresql:向过程传递数组时出现问题

stszievb  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(337)

我的类型是:

CREATE TYPE status_record AS
   (
   id bigint,
   status boolean
   );

以类型数组作为输入参数进行某些处理的过程,如下所示:

CREATE OR REPLACE FUNCTION update_status(status_list status_record[])
RETURNS text AS
$BODY$
DECLARE  

BEGIN    
--does some processing
return 'SUCCESS'; 

end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

最后,我对程序进行了查询:

select *
from update_status(cast(ARRAY[(385,false),(387,false)] as status_record[]));

在pgadmin中一切正常。后来当我尝试使用hibernate原生sql查询调用相同的函数时!!!将显示以下内容:

org.postgresql.util.PSQLException:
 ERROR: array value must start with "{" or dimension information

最后一个问题:两者都有 ARRAY[--something] 以及 {--something} 做同样的工作?

zbq4xfa0

zbq4xfa01#

尝试将数组和类型初始化放在一个字符串中,也许您可以绕过混淆层(也称为orm)的问题:

select update_status(cast('{"(1,true)", "(2,false)"}' as status_record[]));

我不知道冬眠,所以我不知道这是否有效。

zazmityj

zazmityj2#

使用数组文字(数组的文本表示),因为数组构造函数 ARRAY[...] 必须由博士后评估:

SELECT update_status('{"(1,t)","(2,f)"}'::status_record[]);

即使没有明确的演员阵容:

SELECT update_status('{"(1,t)","(2,f)"}');

以前也有类似的案例:
将数组从节点postgres传递到plpgsql函数
如何将自定义类型数组传递给postgres函数

相关问题