2016-05-31 28 views
0

XMLを作成します。現在のコードでは、一度に1つのXMLタグをVARCHAR2変数に追加することでそれを行います。VARCHAR2の代わりにCLOBを使用

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を宣言し、CLOBVARCHAR2変数をフラッシュ維持するための手順を記述することです。

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を構築することは非常に貧弱なアーキテクチャになります。これは、たとえば、文字列の1つがエスケープされる必要がある文字(またはさまざまな理由のいずれか)を持つ場合に、無効なXMLを生成する可能性が高いアーキテクチャのようなものです。オラクル社では、XMLを生成するための機能を多数提供しています(ユース・ケースによってはXMLElementXMLForestSYS_XMLGenDBMS_XMLQueryなど)。これらの組み込み関数を使用すると、構造的にははるかに優れています。

関連する問題