我试图创建一个函数,它将根据提供的文本数组中的ANY进行过滤。该函数引发以下内容:“错误:尝试在pgplsql函数内执行查询时,数组值必须以”{“或维度信息”开头“。查询窗口中运行确切的SQL语句时查询工作正常。PostgreSQL - 数组值必须以“{”或尺寸信息开头
下面以简化样本说明问题。
鉴于表定义:
CREATE TABLE b
(
id serial NOT NULL,
item_id character varying(2) NOT NULL,
CONSTRAINT b_pkey PRIMARY KEY (id)
);
和样本数据:
id item_id
1 A
2 B
3 D
4 T
5 G
6 T
7 B
和功能:
CREATE OR REPLACE FUNCTION get_item_ids() RETURNS integer[] AS
$BODY$DECLARE
qry text;
ids integer[];
items text[];
BEGIN
items := ARRAY['A','B','C']::text[];
qry := format('SELECT id FROM b WHERE item_id = ANY(%L)', items);
raise notice '%', qry;
execute qry into ids;
raise notice 'ids:%', ids;
return ids;
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
当功能被执行如下输出产生:
NOTICE: SELECT id FROM b WHERE item_id = ANY('{A,B,C}')
ERROR: array value must start with "{" or dimension information
CONTEXT: PL/pgSQL function get_item_ids() line 9 at EXECUTE statement
********** Error **********
ERROR: array value must start with "{" or dimension information
SQL state: 22P02
Context: PL/pgSQL function get_item_ids() line 9 at EXECUTE statement
复制和粘贴 “SELECT ID选自B WHERE ITEM_ID = ANY( '{A,B,C}')” 语句到查询窗口产生以下预期的结果:
id integer
1
7
2
我试图许多其他选项,包括类型转换,不同的引用,以及使用array_to_string和unnest函数。任何人都可以解释发生了什么,并建议一个可行的替代方案?