【问题标题】:Call plpgsql function in select's where clause在 select 的 where 子句中调用 plpgsql 函数
【发布时间】:2014-08-01 13:28:47
【问题描述】:

我有一个 plpgsql 函数 complementwhere(parameter1 date) 它返回一个复杂的 where 子句作为文本,假设它返回 clause2 = filter2 作为示例,但它实际上返回了一堆其他子句。

我需要在 select 的 where 子句中调用这个函数来补充那个子句,这就是我目前所拥有的:

SELECT value1 FROM table1 WHERE clause1 = filter1 AND complementwhere(parameter1);

但这会返回错误

WHERE 的参数必须是布尔类型,而不是文本类型

这样做的正确方法是什么?

【问题讨论】:

标签: postgresql plpgsql dynamic-sql


【解决方案1】:

您正在尝试将文本 value 转换为 code,这在 SQL 中通常是不可能的。您需要两次往返服务器。

  1. 获取WHERE子句:SELECT complementwhere('<mydate>')
  2. 基于第一个构建查询并执行它:SELECT .. WHERE ...

(最好)在单个 PL/pgSQL 函数中使用带有 EXECUTE 的动态 SQL。 SO上有很多例子,try a search

您没有提供实际代码...

当您将用户输入转化为代码时,请警惕 SQL 注入

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-17
    • 2012-06-14
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2015-07-26
    相关资源
    最近更新 更多