0

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

4

1 回答 1

0

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

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

于 2017-12-11T21:49:12.130 回答