Vis*_*G S 1 java postgresql stored-procedures hibernate
我的类型为:
CREATE TYPE status_record AS
(
id bigint,
status boolean
);
Run Code Online (Sandbox Code Playgroud)
使用类型数组作为输入参数进行某些处理的过程,如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
最后我查询程序为:
select *
from update_status(cast(ARRAY[(385,false),(387,false)] as status_record[]));
Run Code Online (Sandbox Code Playgroud)
在 pgadmin 中一切正常。后来,当我尝试使用Hibernate 本机 SQL 查询调用相同的命令时,Ka Boom!!!显示如下:
Run Code Online (Sandbox Code Playgroud)org.postgresql.util.PSQLException: ERROR: array value must start with "{" or dimension information
最后一个问题:两者ARRAY[--something]的{--something}作用相同吗?
使用数组文字(数组的文本表示),因为数组构造函数ARRAY[...]必须由 Postgres 计算:
SELECT update_status('{"(1,t)","(2,f)"}'::status_record[]);
Run Code Online (Sandbox Code Playgroud)
甚至可能没有显式的强制转换:
SELECT update_status('{"(1,t)","(2,f)"}');
Run Code Online (Sandbox Code Playgroud)
之前SO上也有类似的案例:
| 归档时间: |
|
| 查看次数: |
3280 次 |
| 最近记录: |