在select的where子句中调用plpgsql函数

时间:2014-08-01 13:28:47

标签: postgresql plpgsql dynamic-sql

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

我需要在select' where子句中调用此函数来补充该子句,这是我到目前为止所做的:

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

但是这会返回错误

  

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 获取WHERE子句:SELECT complementwhere('<mydate>')
  2. 连接SELECT查询。
  3. 执行此查询:SELECT .. WHERE ...
  4. (最好)在单个PL / pgSQL函数中使用带EXECUTE的动态SQL。 SO上有很多例子,try a search

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

    每当您将用户输入转换为代码时,请小心 SQL注入