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



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

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

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

但是这会返回错误

WHERE的

参数必须是布尔类型,而不是text类型

正确的方法是什么?

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

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

(最好)在单个PL/pgSQL函数中与 EXECUTE 一起使用动态SQL。这里有很多关于SO的例子,试着搜索一下。

你没有提供你的实际代码…

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

最新更新