【发布时间】:2016-01-25 09:36:53
【问题描述】:
我有一个数据库表,其中一列有一组值。 让我们假设
Student table
"Name" character(10),
"Subject_studying" text[],
我创建了一个存储过程如下
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 **********
我猜参数 'Subject_studing' 不是作为一个值发送的,而是作为一个简单的字符串发送的。我们如何将该字段中的值传递给存储过程?
【问题讨论】:
-
您的查询肯定被错误引用,应该是
ArrayLike("Subject_studying", 'english')(或者,如果可以的话,在任何地方都省略双引号 -- 引用标识符很容易变得混乱 -- Postgres 的文档还建议您应始终使用标识符引号,或从不)。但是,当然,如果您唯一的错误是这个,您应该会收到不同的错误消息。这是您的问题中的拼写错误,还是该查询实际上产生了该错误消息?
标签: sql postgresql stored-procedures