【发布时间】:2017-12-11 08:59:54
【问题描述】:
我正在使用虚拟过程通过 teiid 公开 REST API。在我的虚拟过程中,我使用立即执行来执行 SQL 查询,该查询将来自虚拟过程的输入参数作为过滤器过滤到 where 子句(动态 where cluase)。这适用于小型选择查询,但是当查询长度超过特定长度时,它会给出解析错误。 这个问题有什么解决办法吗? 有没有其他方法可以在我的 SQL 查询中实现动态 where 子句?
假设闲置查询有大约 4000 个字符。这工作正常。
CREATE VIRTUAL PROCEDURE GetVals(IN filters string) RETURNS (json clob) OPTIONS (UPDATECOUNT 0, "REST:METHOD" 'GET', "REST:URI" 'get_vals')
AS
BEGIN execute immediate
'SELECT JSONOBJECT(JSONARRAY_AGG(JSONOBJECT(
col1,
col2,
col3,
col4,
col5,
col6,
....
....
)) as "data"
) as json FROM(
SELECT SUM((CASE
WHEN ((CASE
.....
....
.....
FROM ex_table AS ex
JOIN table1
ON ...
.....
WHERE a=b AND ' || filters || '
GROUP BY col)
) AB';
END
但只要我在上面的 SQL 查询中添加更多行,它就会给出解析错误登录任意行。我的查询语法没有问题。我所做的唯一更改是查询的长度向其中添加了更多行(例如,在我的 SELECT 语句中,如果我再选择一个额外的列,则会出现解析错误)只有当我使用执行立即执行查询时才会发生这种情况
【问题讨论】:
标签: teiid redhat-datavirt