我需要从返回复杂查询中获取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;
答案 0 :(得分:2)
嗯..我发现了错误。这是从XMLTYPE到CLOB的转换。对于大型XMLTYPE变量,XMLTYPE.getClobVal()具有某种大小限制。所以,我使用XMLSerialize函数进行转换:SELECT XMLSERIALIZE (DOCUMENT lxml_xmltypevar) FROM DUAL;
感谢您的一切。