【发布时间】:2019-06-28 02:17:36
【问题描述】:
我想为我的动态查询使用参数。我有这样的陈述:
RETURN QUERY EXECUTE 'SELECT * FROM boards AS b WHERE b.slug = $1 AND $2'
USING filter_slug, parent_id_query;
我收到了ERROR: argument of AND must be type boolean, not type text
如果我这样做:
RETURN QUERY EXECUTE 'SELECT * FROM boards AS b WHERE b.slug = ''' || filter_slug || ''' AND ' || parent_id_query;
虽然有效。
我觉得我错过了什么/不理解什么。请帮忙。
【问题讨论】:
-
"x and y" 意味着 x 和 y 都必须呈现为某种形式的布尔表达式——它们需要产生真或假。 b.slug = $1 绝对是 true 或 false,但 $2 只有在它是布尔值时才会这样做。我知道
parent_id_query不是布尔值...是查询吗?如果是这样,您只能将值传递给参数。参数不只是进行字符串替换。 -
啊,好吧。那很有帮助。我想我可以通过仅用参数替换
filter_slug并保留parent_id_query来解决它。谢谢。
标签: sql postgresql dynamic plpgsql