我有一个DB表,其中一列有一个值数组。 让我们假设
CREATE OR REPLACE FUNCTION ArrayLike(vals text[], v text) RETURNS integer AS $$
DECLARE
str text;
BEGIN
v := replace(replace(v, '%', '.*'), '_', '.');
FOREACH str IN ARRAY vals LOOP
IF str ~* v THEN
RETURN 1;
END IF;
END LOOP;
RETURN 0;
END; $$
LANGUAGE PLPGSQL;
我创建了一个存储过程如下
SELECT Name FROM Student WHERE ArrayLike('Subject_studying', 'english') = 1
返回我正在寻找的所有主题。 如何将主题的参数传递给存储过程。
我的查询看起来像
ERROR: FOREACH expression must not be null
CONTEXT: PL/pgSQL function Arraylike(text[],text) line 6 at FOREACH over array
********** Error **********
查询给我一个错误
bp 74af3e99
我猜参数' Subject_studying'不作为值发送,而是作为简单字符串发送。我们如何将该字段中的值传递给存储过程?
答案 0 :(得分:1)
错误是由列名subject_studying
作为字符串传递引起的,正如您已经注意到的那样。取消引用它以使错误消失。
但实际上你不必为此创建自己的功能。您可以使用内置的ANY
运算符:
SELECT Name FROM Student WHERE 'english' = ANY(subject_studying);