如何将字段值作为参数传递给存储过程

时间:2016-01-25 09:36:53

标签: sql postgresql stored-procedures

我有一个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'不作为值发送,而是作为简单字符串发送。我们如何将该字段中的值传递给存储过程?

1 个答案:

答案 0 :(得分:1)

错误是由列名subject_studying作为字符串传递引起的,正如您已经注意到的那样。取消引用它以使错误消失。

但实际上你不必为此创建自己的功能。您可以使用内置的ANY运算符:

SELECT Name FROM Student WHERE 'english' = ANY(subject_studying);