首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CLOB代替VARCHAR2

使用CLOB代替VARCHAR2
EN

Stack Overflow用户
提问于 2016-05-31 17:09:34
回答 1查看 715关注 0票数 0

我们想要创建一个XML。当前代码通过在VARCHAR2变量中一次追加一个XML标记来完成这一任务。

代码语言:javascript
复制
xmlString                   VARCHAR2(32767);
....
....
xmlString := xmlString || '<' || elementName || '>' || elementValue || '</' || elementName || '>';

但是,由于VARCHAR2上32767个字符的大小限制,对于一个非常长的XML,我们会得到以下错误。

代码语言:javascript
复制
ORA-06502: PL/SQL: numeric or value error: character string buffer too small 

我们所拥有的解决方案是声明一个CLOB,并编写一个过程来继续将VARCHAR2变量刷新到CLOB

代码语言:javascript
复制
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的工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-31 17:33:31

是的,如果将xmlString的数据类型更改为clob,则字符串连接运算符将继续工作。

然而,以这种方式构建XML将是一个非常糟糕的体系结构。这种体系结构很有可能生成无效的XML,例如,当其中一个字符串碰巧有一个字符需要转义时(或者出于许多不同的原因)。Oracle提供了大量生成XML的函数(XMLElementXMLForestXMLGenXMLQuery等等,具体取决于您的用例)。在架构上,使用那些内置的功能会好得多。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37551789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档