我正在使用虚拟过程来使用 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 语句中,如果我再选择一个额外的列,则会出现解析错误)只有当我使用立即执行来执行查询时才会发生这种情况