DBMS_XMLGEN 包限制?
DBMS_XMLGEN package limitations?
我需要从复杂查询的返回中得到一个 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 是空的。
我们这里有一些限制?我查阅了 Google 和 Oracle 文档,但找不到任何参考资料。
有什么帮助吗?
谢谢。
菲利普
Edit1:我发现在将 XMLTYPE 转换为 CLOB 时出现数字或值错误。我认为我的 XMLTYPE 不为空。它只是一个大变量,我无法使用 xmltype.getClobVal();
将其转换为 CLOB
嗯..我发现了错误。这是从 XMLTYPE 到 CLOB 的转换。对于大型 XMLTYPE 变量,XMLTYPE.getClobVal() 有某种大小限制。因此,我使用 XMLSerialize 函数进行转换:SELECT XMLSERIALIZE (DOCUMENT lxml_xmltypevar) FROM DUAL;
感谢任何事情。
我需要从复杂查询的返回中得到一个 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 是空的。
我们这里有一些限制?我查阅了 Google 和 Oracle 文档,但找不到任何参考资料。
有什么帮助吗? 谢谢。 菲利普
Edit1:我发现在将 XMLTYPE 转换为 CLOB 时出现数字或值错误。我认为我的 XMLTYPE 不为空。它只是一个大变量,我无法使用 xmltype.getClobVal();
将其转换为 CLOB嗯..我发现了错误。这是从 XMLTYPE 到 CLOB 的转换。对于大型 XMLTYPE 变量,XMLTYPE.getClobVal() 有某种大小限制。因此,我使用 XMLSerialize 函数进行转换:SELECT XMLSERIALIZE (DOCUMENT lxml_xmltypevar) FROM DUAL;
感谢任何事情。