ERROR: op ANY/ALL (array) requires array on right side in Postgres Function
ERROR: op ANY/ALL (array) requires array on right side in Postgres Function
我在我的 PostgreSQL 函数中遇到错误,我通过传递两个 parameters.Below 是我的函数和 table 结构来过滤我的数据,请告诉我哪里和哪里做错了
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() ;
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
您可以使用 unnest
:
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());
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
-- "(1,A)"
或者只是将 ANY()
更改为 ANY()
($1 - 是第一个参数,$2 - 是第二个参数):
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();
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
-- "(1,A)"
</code> 是值为 <code>'A'
的第一个参数,ANY
需要数组类型的参数 (
).
我在我的 PostgreSQL 函数中遇到错误,我通过传递两个 parameters.Below 是我的函数和 table 结构来过滤我的数据,请告诉我哪里和哪里做错了
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() ;
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
您可以使用 unnest
:
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());
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
-- "(1,A)"
或者只是将 ANY()
更改为 ANY()
($1 - 是第一个参数,$2 - 是第二个参数):
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();
END
$BODY$
LANGUAGE plpgsql VOLATILE
SELECT test_str_1('A', 1,2,3);
-- "(1,A)"
</code> 是值为 <code>'A'
的第一个参数,ANY
需要数组类型的参数 ().