我有一个plpgsql函数complementwhere(parameter1 date)
,它返回一个复杂的where子句作为文本,让它说它返回clause2 = filter2
只是作为一个例子,但它实际上返回了一堆其他的子句
我需要在select' where子句中调用此函数来补充该子句,这是我到目前为止所做的:
SELECT value1 FROM table1 WHERE clause1 = filter1 AND complementwhere(parameter1);
但是这会返回错误
WHERE的参数必须是boolean类型,而不是类型文本
这样做的正确方法是什么?
答案 0 :(得分:1)
您正在尝试将文本值转换为代码,这在SQL中通常是不可能的。您需要两次往返服务器。
WHERE
子句:SELECT complementwhere('<mydate>')
。 SELECT
查询。 SELECT .. WHERE ...
。 或(最好)在单个PL / pgSQL函数中使用带EXECUTE
的动态SQL。 SO上有很多例子,try a search。
您没有提供实际代码......
每当您将用户输入转换为代码时,请小心 SQL注入 。