Teiid execute immediate 在执行长查询时给出解析错误

Teiid execute immediate gives a parsing error when executing long queries

我正在使用虚拟过程公开 REST API 使用 teiid。在我的虚拟过程中,我使用 execute immediate 来执行 SQL 查询,该查询从虚拟过程中获取输入参数作为 where 子句(动态 where 子句)的过滤器。这适用于小型 select 查询,但当查询长度超过特定长度时,会出现解析错误。 这个问题有什么解决办法吗? 在我的 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 语句中,如果我 select 多了一个额外的列,则会出现解析错误)这仅在我使用时发生立即执行以执行查询

您使用的是什么版本或 Teiid?你的解析异常是什么?

如果是由于截断,那么您将需要使用 9.1 或更高版本,这允许更长的评估 sql 字符串 - https://issues.jboss.org/browse/TEIID-4376