Postgresql 错误:op ANY/ALL(数组)要求Postgres函数中的数组位于右侧
我在我的PostgreSQL函数中遇到错误,我通过传递两个参数来过滤数据。下面是我的函数和表结构。请告诉我哪里出错,我做错了什么Postgresql 错误:op ANY/ALL(数组)要求Postgres函数中的数组位于右侧,postgresql,plpgsql,Postgresql,Plpgsql,我在我的PostgreSQL函数中遇到错误,我通过传递两个参数来过滤数据。下面是我的函数和表结构。请告诉我哪里出错,我做错了什么 CREATE TABLE table_2( id_col text, name_col text); INSERT INTO table_2(id_col, name_col) VALUES (1, 'A'),(2, 'B'),(3, 'C'), (4, 'D'),(5, 'E'),(6, 'F'); CREATE OR REPLACE FU
CREATE TABLE table_2(
id_col text,
name_col text);
INSERT INTO table_2(id_col, name_col)
VALUES (1, 'A'),(2, 'B'),(3, 'C'),
(4, 'D'),(5, 'E'),(6, 'F');
CREATE OR REPLACE FUNCTION test_str_1(IN param_name_col text,
VARIADIC integer[], OUT id_col text, OUT name_col text)
RETURNS SETOF record AS
$BODY$
BEGIN
return query
SELECT t2.id_col,t2.name_col from table_2 t2
Where t2.name_col = param_name_col AND t2.id_col::int = ANY($1) ;
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
您可以使用
unest
:
CREATE OR REPLACE FUNCTION test_str_1(IN param_name_col text,
VARIADIC integer[], OUT id_col text, OUT name_col text)
RETURNS SETOF record AS
$BODY$
BEGIN
return query
SELECT t2.id_col,t2.name_col
from table_2 t2
Where t2.name_col = param_name_col
AND t2.id_col::int IN (SELECT * FROM unnest($2));
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
-- "(1,A)"
或者只需将ANY($1)
更改为ANY($2)
($1-是第一个参数,$2-是第二个参数):
$1
是第一个值为'A'
的参数,任何都需要数组类型的参数($2
)。如果只输入整数值并且仍然依赖转换为整数值,为什么要声明t2.id\u col
为文本?没有道理。
CREATE OR REPLACE FUNCTION test_str_1(IN param_name_col text,
VARIADIC integer[], OUT id_col text, OUT name_col text)
RETURNS SETOF record AS
$BODY$
BEGIN
return query
SELECT t2.id_col,t2.name_col
from table_2 t2
Where t2.name_col = param_name_col
AND t2.id_col::int = ANY($2);
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
-- "(1,A)"