DBMS_XMLGEN包限制?

时间:2015-10-26 15:10:04

标签: oracle dbms-xmlgen

我需要从返回复杂查询中获取XML。我以前在类似情况下的例子中,我使用了DBMS_XMLGEN包上下文来生成XML。

但是在这个例子中,我遇到了一个问题:

    ...
    begin
    l_ctx :=
             DBMS_XMLGEN.newcontext (
                'SELECT SIRENREC AS receiptNumber,
ICPSCDDE AS companyCode,
             SISENPOL
                AS policyNumber,
             SIREISIN AS claimNumber_aux,
             SUBSTR (SIREISIN, 3, LENGTH (SIREISIN)) AS claimNumber,
      sirevlre - sirevirs + sireviva,
                AS receiptAmount
        FROM MTICPS,
             MTSIRE,
             MTSISE,
             MTINPI,
             MTRLRS              
       WHERE     ICPSIDEN = ''N''
             AND ICPSRFPG = :refPag
             AND ICPSCDDE = SIRECDDE
             AND ICPSISIN = SIREISIN
             AND ICPSNREC = SIRENREC
             AND RLRSCDDE = SIRECDDE
             AND RLRSSISE = SIREISIN
             AND RLRSSIRE = SIRENREC
             AND RLRSISIN = INPIISIN
             AND RLRSRECI = INPINREC
             AND RLRSCDDE = INPICDDE
             AND SIRECDDE = SISECDDE
             AND SIREISIN = SISEISIN
             AND SIREVLRE <> 0
             and rownum < 110
          ORDER BY SIRECDDE, SIREISIN, SIRENREC');
      DBMS_XMLGEN.setrowsettag (l_ctx, 'INT_DATA');
          DBMS_XMLGEN.setrowtag (l_ctx, 'Item');

          DBMS_XMLGEN.setbindvalue (l_ctx, 'refPag', 'BLABLA');
    lxmltype := DBMS_XMLGEN.getXmlType (l_ctx);

          DBMS_XMLGEN.closeContext (l_ctx);

我认为我的问题在于尺寸。例如,如果我输入and rownum < 110条件,我可以获得所有XML并完成110条记录。但如果我有超过110条记录,我的l_ctx变量就是空的,我的XML是空的。

我们在这里有一些限制吗?我查了谷歌和Oracle文档,但我找不到任何参考。

有任何帮助吗? 谢谢。 菲利普

Edit1:我发现在将XMLTYPE转换为CLOB时出现数字或值错误。我认为我的XMLTYPE不是null。它只是一个很大的变量,我无法使用xmltype.getClobVal()将其转换为CLOB;

1 个答案:

答案 0 :(得分:2)

嗯..我发现了错误。这是从XMLTYPE到CLOB的转换。对于大型XMLTYPE变量,XMLTYPE.getClobVal()具有某种大小限制。所以,我使用XMLSerialize函数进行转换:SELECT XMLSERIALIZE (DOCUMENT lxml_xmltypevar) FROM DUAL;

感谢您的一切。