我試圖創建一個函數,它將根據提供的文本數組中的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函數。任何人都可以解釋發生了什麼,並建議一個可行的替代方案?