PostgreSQL:将数组传递给过程的问题
PostgreSQL: Issue with passing array to procedure
我的类型为:
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 native SQL Query Ka Boom!!! 调用相同内容时,显示如下:
org.postgresql.util.PSQLException:
ERROR: array value must start with "{" or dimension information
最后一个问题:ARRAY[--something]
和{--something}
做同样的工作?
尝试将数组和类型初始化放入字符串中,也许您可以绕过混淆层(aka ORM)的问题:
select update_status(cast('{"(1,true)", "(2,false)"}' as status_record[]));
我不知道 Hibernate,所以我不知道它是否行得通。
使用数组文字(数组的文本表示),因为数组构造函数ARRAY[...]
必须由Postgres计算:
SELECT update_status('{"(1,t)","(2,f)"}'::status_record[]);
也许即使没有显式转换:
SELECT update_status('{"(1,t)","(2,f)"}');
之前SO上有过类似案例:
- Pass array from node-postgres to plpgsql function
- How to pass custom type array to Postgres function
我的类型为:
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 native SQL Query Ka Boom!!! 调用相同内容时,显示如下:
org.postgresql.util.PSQLException: ERROR: array value must start with "{" or dimension information
最后一个问题:ARRAY[--something]
和{--something}
做同样的工作?
尝试将数组和类型初始化放入字符串中,也许您可以绕过混淆层(aka ORM)的问题:
select update_status(cast('{"(1,true)", "(2,false)"}' as status_record[]));
我不知道 Hibernate,所以我不知道它是否行得通。
使用数组文字(数组的文本表示),因为数组构造函数ARRAY[...]
必须由Postgres计算:
SELECT update_status('{"(1,t)","(2,f)"}'::status_record[]);
也许即使没有显式转换:
SELECT update_status('{"(1,t)","(2,f)"}');
之前SO上有过类似案例:
- Pass array from node-postgres to plpgsql function
- How to pass custom type array to Postgres function