【发布时间】:2022-01-17 11:03:36
【问题描述】:
我创建了一个用于过滤的函数
CREATE OR REPLACE FUNCTION filtersearch(
val1 text[] DEFAULT NULL::text[],
val2 text[] DEFAULT NULL::text[],
val3 text[] DEFAULT NULL::text[],
val4 boolean DEFAULT NULL::boolean)
RETURNS SETOF student_table
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
where_val text := '';
result_text int;
BEGIN
IF $4 = true THEN
where_val := 'attendance = true';
raise notice 'Value: %', where_val;
END IF;
RETURN QUERY EXECUTE
'SELECT * FROM student_table"
WHERE (LOWER("student_name") = ($1) OR $1 IS NULL)
AND ((LOWER("subject") = ($2)) OR $2 IS NULL)
AND ((LOWER("comments") ILIKE $3)
OR ($3 IS NULL)
)
'|| where_val ||'' USING where_val;
--raise notice 'Value: %', result_text;
END
$BODY$;
我调用它时出错,
错误:操作 ANY/ALL(数组)需要右侧的数组
非常感谢我代码中的任何建议或 cmets
这是我的表格的示例数据
| student_name | subject | professor | comments | attendance |
|---|---|---|---|---|
| Amelia | Math | Digory Kirkle | TRUE | |
| Benjamin | Science | Hari Seldon | FALSE | |
| Charlotte | English | Lee Everett | TRUE | |
| Amelia | English | Lee Everett | FALSE |
我是这样调用代码的
SELECT filtersearch(
(array['Amelia, Charlotte']::text[]),
(NULL),
(NULL),
(true)
)
【问题讨论】:
-
你能用样本数据创建一个 MVE 吗?如果没有您为我们创建
student_table,我们将无法调用函数。你怎么称呼这段代码? -
我在我的问题中添加了一个示例数据,非常感谢
-
要比较数组,您需要使用
= any ($1)但您没有将 3 个参数传递给execute query- 只有 一个 是''或'attendance = true' -
@a_horse_with_no_name 我遇到了一个错误 ERROR: op ANY/ALL (array) requires array on the right side 如何解决?
-
正如我所说:您需要传递 3 个参数(函数的参数),而不仅仅是带有
using子句的一个。
标签: postgresql plpgsql