执行长查询时,Teiid execute immediate会出现解析错误

时间:2017-12-11 08:59:55

标签: teiid redhat-datavirt

我正在使用虚拟过程使用teiid公开REST API。在我的虚拟过程中,我使用execute immediate执行SQL查询,该查询将来自虚拟过程的输入参数作为过滤器传递给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语句中如果我选择一个额外的列,这会产生解析错误)这只在我使用execute immediate执行查询时发生

1 个答案:

答案 0 :(得分:0)

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

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