功能WHERE子句中的PostgreSQL(动态列)

问题描述:

我创建func_leonard_test2函数返回teach_fra =真功能WHERE子句中的PostgreSQL(动态列)

SELECT func_leonard_test2('Français-Philosophie'); 

func_leonard_test2

CREATE OR REPLACE FUNCTION public.func_leonard_test2(
    IN url text, 
    OUT translation text) 
    RETURNS text AS 
$BODY$BEGIN 

SELECT CONCAT(translate,'=true') INTO translation FROM seo_content WHERE name=url;  

END;$BODY$ 

我想在添加功能where子句像低于

SELECT description FROM c_users WHERE (SELECT func_leonard_test('Français-Philosophie')) LIMIT 10; 

但我得到th e error 错误:WHERE的参数必须是布尔类型,而不是文本类型

如何使函数在WHERE子句中工作?

谢谢你的时间。

+0

你需要在你的函数返回值。 – Mokadillion

你的函数返回一个字符串。你需要某种字符串比较。像成才:

WHERE func_leonard_test('Français-Philosophie') IS NOT NULL 

WHERE func_leonard_test('Français-Philosophie') = 'ABC' 

此外,SELECT是没有必要的。

编辑:

我想你想要的函数返回一个布尔值。写这将是一个方法:

CREATE OR REPLACE FUNCTION public.func_leonard_test2 (
    IN in_url text 
    ) 
    RETURNS boolean AS 
$BODY$BEGIN 
    RETURN (SELECT (c.translate = true) 
      FROM seo_content c 
      WHERE c.name = in_url 
      );  
END;$BODY$ 

然后你可以使用:

WHERE func_leonard_test('Français-Philosophie') 
+0

嗨,我得到这个**函数结果类型必须是布尔值,因为OUT参数**,这里的OUT可能是teach_fra = true不是布尔值。 –