我们想要创建一个XML。当前代码通过在VARCHAR2变量中一次追加一个XML标记来完成这一任务。
xmlString VARCHAR2(32767);
....
....
xmlString := xmlString || '<' || elementName || '>' || elementValue || '</' || elementName || '>';但是,由于VARCHAR2上32767个字符的大小限制,对于一个非常长的XML,我们会得到以下错误。
ORA-06502: PL/SQL: numeric or value error: character string buffer too small 我们所拥有的解决方案是声明一个CLOB,并编写一个过程来继续将VARCHAR2变量刷新到CLOB。
v_result clob;
.....
.....
IF xmlString IS NOT NULL THEN
dbms_lob.writeappend( v_result, LENGTH(xmlString), xmlString);
xmlString := NULL;
END IF;然而,这将需要用调用新函数来替换许多现有的代码行。有更好的方法吗?
与PLSQL中的操作符重载类似吗?我是否可以将xmlString变量的数据类型更改为CLOB,并让||操作符来完成dbms_lob.writeappend的工作?
发布于 2016-05-31 17:33:31
是的,如果将xmlString的数据类型更改为clob,则字符串连接运算符将继续工作。
然而,以这种方式构建XML将是一个非常糟糕的体系结构。这种体系结构很有可能生成无效的XML,例如,当其中一个字符串碰巧有一个字符需要转义时(或者出于许多不同的原因)。Oracle提供了大量生成XML的函数(XMLElement、XMLForest、XMLGen、XMLQuery等等,具体取决于您的用例)。在架构上,使用那些内置的功能会好得多。
https://stackoverflow.com/questions/37551789
复制相似问题