代码之家  ›  专栏  ›  技术社区  ›  Divide by Zero

在EXECUTE/Using中使用带布尔值的PostgreSQL参数

  •  0
  • Divide by Zero  · 技术社区  · 5 年前

    我想在动态查询中使用参数。我有这样的陈述:

    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;
    

    但它确实有效。

    我觉得我错过了什么/不理解什么。请帮忙。

    1 回复  |  直到 5 年前
        1
  •  1
  •   Gordon Linoff    5 年前

    您缺少的是如何使用参数。参数不是替换SQL语句中任意文本的宏。相反,它们是分配给代码内部“变量”的文本值。这些值通常是数字、字符串或日期。

    特别是,参数不能用于:

    • 函数名
    • 操作员
    • 一般表达式

    因此,不幸的是,您必须在不使用泛型参数的情况下构造查询的该部分(尽管您可以 $2 = $3