DBMS_XMLGEN
パッケージは、SQL問合せの結果を標準的なXML形式に変換します。このパッケージでは、入力された任意のSQL問合せをXML形式に変換し、その結果をCLOB
として戻します。このパッケージは、Cで記述されてカーネルにコンパイルされる点を除き、DBMS_XMLQUERY
パッケージに類似しています。このパッケージを実行できるのは、データベース上のみです。
この章では、次の項目について説明します。
関連項目: XMLサポートの詳細およびDBMS_XMLGENの使用例については、『Oracle XML DB開発者ガイド』 を参照してください。 |
表192-1 DBMS_XMLGENパッケージのサブプログラムの要約
サブプログラム | 説明 |
---|---|
|
コンテキストをクローズし、リソースをすべて解放します。 |
|
XMLを、エスケープ済またはエスケープ解除済の同等のXMLに変換します。 |
GETXMLファンクションを最後にコールしたときに処理されたSQL行の数を取得します。 |
|
XML文書を取得します。 |
|
XML文書を取得し、 |
|
|
新しいコンテキスト・ハンドルを作成します。 |
NEWCONTEXTFROMHIERARCHYファンクション |
結果から再帰的要素を含む階層XMLを生成するために、GETXMLファンクションなどのファンクションで使用されるハンドルを取得します。 |
|
問合せを再起動し、最初からフェッチを開始します。 |
|
XML文字ではない |
|
一度にフェッチされる行の最大数を設定します。 |
|
|
|
結果全体を囲む要素の名前を設定します。 |
|
結果の各行を囲む要素の名前を設定します。 |
|
XMLを生成する前に毎回スキップされる行数を設定します。 |
|
コレクション要素には、タグ |
USENULLATTRIBUTEINDICATORプロシージャ |
|
このプロシージャは、指定されたコンテキストをクローズし、そのコンテキストに関連付けられたすべてのリソース(SQLカーソル、バインド、定義バッファなど)を解放します。このプロシージャをコールした後はコンテキスト・ハンドルが無効になるため、後続のファンクション・コールではハンドルを使用できなくなります。
このファンクションは、XMLデータを、エスケープ済またはエスケープ解除済の同等のXMLに変換し、XML CLOB
データをエンコードまたはデコードされた形式で戻します。このファンクションの指定方法は、次のとおりです。
構文
文字列形式(VARCHAR2
)でXMLDATA
を使用します。
DBMS_XMLGEN.CONVERT ( xmlData IN VARCHAR2, flag IN NUMBER := ENTITY_ENCODE) RETURN VARCHAR2;
CLOB
形式でXMLDATA
を使用します。
DBMS_XMLGEN.CONVERT ( xmlData IN CLOB, flag IN NUMBER := ENTITY_ENCODE) RETURN CLOB;
このファンクションは、GETXMLファンクションをコールしてXML文書を生成するときに処理されたSQL行の数を取得します。この行数には、XML文書の生成前にスキップされた行は含まれません。GETXMLファンクションは行がない場合でも、常にXML文書を生成します。
このファンクションはXML文書を取得します。このファンクションはオーバーロードされています。
構文
指定した最大行数まで行をフェッチすることによって、XML文書を取得します。取得したXML文書は、入力パラメータとして渡されたCLOB
に追加されます。CLOBの余分なコピーが作成されるのを回避し、後続のコールで同じCLOB
を再利用する場合は、このバージョンのGETXMLファンクション
を使用してください。CLOB
が再利用できるため、このようにGETXMLファンクションをコールすると効果的です。
DBMS_XMLGEN.GETXML ( ctx IN ctxHandle, tmpclob IN OUT NCOPY CLOB, dtdOrSchema IN number := NONE) RETURN BOOLEAN;
次の例では、XML文書を生成し、一時CLOB
として戻します。このファンクションから取得した一時CLOB
は、DBMS_LOB.FREETEMPORARY
をコールして解放する必要があります。
DBMS_XMLGEN.GETXML ( ctx IN ctxHandle, dtdOrSchema IN number := NONE) RETURN CLOB;
次の例では、SQL問合せ文字列の実行結果をXML形式に変換し、そのXML文書を一時CLOB
として戻しますが、これについては、後でDBMS_LOB.FREETEMPORARY
をコールして解放する必要があります。
DBMS_XMLGEN.GETXML ( sqlQuery IN VARCHAR2, dtdOrSchema IN number := NONE) RETURN CLOB;
使用上の注意
SETSKIPROWSプロシージャのコールで指定された行がスキップされた場合は、SETMAXROWSプロシージャのコールで指定された最大数の行(指定されていない場合は結果全体)がフェッチされ、XMLに変換されます。行が取り出されたかどうかをチェックするには、GETNUMROWSPROCESSEDファンクションを使用してください。
このファンクションは、XML文書を取得してその文書をXMLTYPE
として戻します。XMLTYPE
操作は、結果に対して実行できます。このファンクションはオーバーロードされています。
このファンクションは、新しいコンテキスト・ハンドルを生成して戻します。このコンテキスト・ハンドルは、結果からXMLを生成するために、GETXMLファンクションなどのファンクションで使用されます。このファンクションの指定方法は、次のとおりです。
このファンクションは、結果から再帰的要素を含む階層XMLを生成するために、GETXMLファンクションなどのファンクションで使用されるハンドルを取得します。
このプロシージャは、XMLデータ内の特殊文字を同等のエスケープXMLに変換するかどうかを設定します。たとえば、<
符号は<
に変換されます。デフォルトでは、変換が実行されます。入力データに<
、>
、"、'
などの特殊文字(エスケープが必要)を格納できない場合は、このプロシージャを使用するとXML処理のパフォーマンスが向上します。特にデータ量が多い場合、文字データをスキャンして特殊文字を置き換える作業は非効率的です。
パラメータ
表192-10 SETCONVERTSPECIALCHARSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
いずれかのNEWCONTEXTファンクションをコールして取得したコンテキスト・ハンドル。 |
|
|
このプロシージャでは、GETXMLファンクションをコールするたびにSQLの問合せ結果からフェッチする行の最大数を設定します。このプロシージャは、ページ番号付きの結果を生成する場合に使用します。たとえば、XMLデータやHTMLデータのページの生成時に、このmaxrows
パラメータを設定して、XMLやHTMLに変換する行の数を抑制します。
パラメータ
表192-11 SETMAXROWSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
実行した問合せに対応するコンテキスト・ハンドル。 |
|
GETXMLファンクションをコールするたびに取得する行の最大数。 |
このプロシージャは、ドキュメントのルート要素名を設定します。デフォルトの名前はROWSET
です。
パラメータ
表192-13 SETROWSETTAGプロシージャのパラメータ
パラメータ | 説明 |
---|---|
ctx |
NEWCONTEXTファンクションをコールして取得したコンテキスト・ハンドル。 |
rowSetTagName |
ドキュメントの要素名。 |
このプロシージャは、すべての行を分割する要素の名前を設定します。デフォルトの名前はROW
です。
パラメータ
表192-14 SETROWTAGプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
NEWCONTEXTファンクションをコールして取得したコンテキスト・ハンドル。 |
|
|
このプロシージャでは、GETXMLファンクションをコールするたびに、任意の行数をスキップしてからXML出力を生成します。このプロシージャは、ステートレスWebページ用にページ番号付きの結果を生成する場合に使用します。たとえば、XMLまたはHTMLデータの最初のページを生成する場合は、skiprows
を0 (ゼロ)に設定します。次ページ以降の場合、skiprows
には最初のページで取得した行数を設定します。詳細は、GETNUMROWSPROCESSEDファンクションを参照してください。
このプロシージャでは、NULL
を示すためにXML属性を使用するか、XML文書で特定のエンティティのインクルードを省略するかどうかを指定します。このプロシージャは、SETNULLHANDLINGプロシージャのショートカットとして使用します。