我的问题的非功能版本很简单:我想根据文本变量是否具有某些特定值来过滤值:
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
子句中使用数组?
答案 0 :(得分:2)
array_to_string
返回单个字符串,而不是字符串列表,因此在您的函数中实际运行:
where data_type IN ('boolean, integer')
(显然不是你想要的)
您首先不需要转换数组。您可以直接使用
where data_type = any ($1)