Postgres:数组值必须以“{”或维度信息开头

时间:2015-07-24 11:41:35

标签: sql postgresql

我创建了postgreSQL函数,其中我执行的查询如下:

CREATE OR REPLACE FUNCTION eapar.get_eform_detail(frm_id bigint,lvl_codes text)
RETURNS TABLE(eform_detail_id bigint)
AS
$BODY$   

DECLARE
query text;
level_codes text[];
BEGIN
query := 'SELECT eform_detail_id from eform_detail where form_id='||$1||' ';

--some sql code
--$2 is lvl_codes

select into level_codes string_to_array($2, ','); --uptil here no problem

RAISE NOTICE '%',level_codes; --printing {SRV,SAA} for 'SRV,SAA'::text

query:= query || 'AND level_code = ANY('''||level_codes||''') '; --problem area

--remaining sql code

功能已成功创建,但当我调用时:

select * from eapar.get_eform_detail(265,'SRV,SAA'::text)  

它给出错误:

ERROR:  array value must start with "{" or dimension information
LINE 1: ...orm_detail || 'AND level_code = ANY('''||level_codes||''') '

我是postgres函数的新手。不知道如何使用ANY运算符将文本数组替换为变量,并将其执行。请帮忙。谢谢

1 个答案:

答案 0 :(得分:4)

RAISE NOTICE返回的字符串格式看起来是正确的,所以我猜测||运算符不会强制值为文本。这可能是因为它对数组的含义不同,所以误解了你的意图。

尝试使用明确的演员:

query:= query || 'AND level_code = ANY('''||level_codes::text||''') ';