过滤函数中的多个值

时间:2015-02-26 12:12:26

标签: postgresql

我的问题的非功能版本很简单:我想根据文本变量是否具有某些特定值来过滤值:

SELECT routine_name, data_type
  FROM information_schema.routines
   WHERE data_type IN ('boolean', 'integer');

由于我想对我过滤的内容做很多变化,我希望有一个接受要过滤的值的函数。我尝试将其转换为函数的尝试如下:

CREATE FUNCTION get_fns_by_data_type(data_types text[])
  RETURNS TABLE(routine_name text, data_type text) AS $$
BEGIN
  RETURN QUERY SELECT routine_name, data_type
    FROM information_schema.routines
    WHERE data_type IN (array_to_string($1, ','));
END;
$$ LANGUAGE plpgsql;

我打电话的时候:

SELECT * FROM get_fns_by_data_type(ARRAY['boolean', 'integer'])

我没有结果。

我怀疑我应该引用这些值,但我不确定最佳方法,也不知道如何调试问题。

如何在WHERE子句中使用数组?

1 个答案:

答案 0 :(得分:2)

array_to_string返回单个字符串,而不是字符串列表,因此在您的函数中实际运行:

where data_type IN ('boolean, integer') 

(显然不是你想要的)

您首先不需要转换数组。您可以直接使用

where data_type = any ($1)