Sql Postgres:数组值必须以“开始”;{quot;或维度信息
我已经创建了postgreSQL函数,在该函数中执行如下查询: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
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这对未来的任何人来说都是显而易见的。