在 EXECUTE / USING 中使用带有布尔值的 PostgreSQL 参数
Using PostgreSQL parameters with booleans in EXECUTE / USING
我想为我的动态查询使用参数。我有这样的陈述:
RETURN QUERY EXECUTE 'SELECT * FROM boards AS b WHERE b.slug = AND '
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;
虽然有效。
我觉得我错过了什么/不明白什么。请帮忙。
您缺少的是如何使用参数。参数不是替换 SQL 语句中的任意文本的宏。相反,它们是代码中分配给 "variables" 的文字值。这些值通常是数字、字符串或日期。
特别是,参数不能用于:
- 标识符(列名称和 table 名称)
- 函数名称
- 运营商
- SQL 关键词
- 通用表达式
因此,不幸的是,您必须在没有通用参数的情况下构建查询的那一部分(尽管您可以使用 =
)
我想为我的动态查询使用参数。我有这样的陈述:
RETURN QUERY EXECUTE 'SELECT * FROM boards AS b WHERE b.slug = AND '
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;
虽然有效。
我觉得我错过了什么/不明白什么。请帮忙。
您缺少的是如何使用参数。参数不是替换 SQL 语句中的任意文本的宏。相反,它们是代码中分配给 "variables" 的文字值。这些值通常是数字、字符串或日期。
特别是,参数不能用于:
- 标识符(列名称和 table 名称)
- 函数名称
- 运营商
- SQL 关键词
- 通用表达式
因此,不幸的是,您必须在没有通用参数的情况下构建查询的那一部分(尽管您可以使用 =
)