我创建了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运算符将文本数组替换为变量,并将其执行。请帮忙。谢谢
答案 0 :(得分:4)
RAISE NOTICE
返回的字符串格式看起来是正确的,所以我猜测||
运算符不会强制值为文本。这可能是因为它对数组的含义不同,所以误解了你的意图。
尝试使用明确的演员:
query:= query || 'AND level_code = ANY('''||level_codes::text||''') ';