2016-05-31 78 views
0

我們想要創建一個XML。當前代碼通過將一個XML標籤一次追加到VARCHAR2變量中來實現。使用CLOB代替VARCHAR2

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的工作嗎?

回答

4

是的,如果將數據類型xmlString更改爲clob,則字符串連接運算符將繼續工作。

但是,以這種方式構建XML將是一個非常糟糕的體系結構。例如,當某個字符串碰巧有一個字符需要轉義(或出於多種不同原因)時,這種架構很可能會生成無效的XML。 Oracle提供了大量功能來生成XML(根據您的使用情況,可以生成XMLElementXMLForestSYS_XMLGenDBMS_XMLQuery等)。使用這些內置函數在架構上會好得多。