Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Postgres:数组值必须以“开始”;{quot;或维度信息_Sql_Postgresql - Fatal编程技术网

Sql Postgres:数组值必须以“开始”;{quot;或维度信息

Sql Postgres:数组值必须以“开始”;{quot;或维度信息,sql,postgresql,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 ef

我已经创建了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函数。不知道如何使用任何运算符将文本数组替换为变量,并将其执行。请提供帮助。谢谢。由
提升通知返回的字符串格式看起来正确,因此我猜
|
运算符没有强制将值转换为文本。这可能是因为对于数组来说,verload具有不同的含义,因此会误解您的意图

尝试使用显式强制转换:

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

我想你可能只需要从数组到字符串的显式转换-
“…”| level|u codes::text | |“…”
“-数组的
|
运算符重载,因此可能会有不同的解释。太棒了!!它工作了。我从早上开始就在寻找解决方案。非常感谢你。很高兴它工作了。我将它作为一个答案发布,所以它是m这对未来的任何人来说都是显而易见的。