タスクの概説:
XML エクステンダーには、データを取り出すための 2 つの方法が備わっています。
表 12. XML エクステンダーのデフォルト・キャスト関数
SELECT 文節内で使用されるキャスト | 戻りタイプ | 説明 |
---|---|---|
varchar(XMLVARCHAR) | VARCHAR | VARCHAR による XML 文書 |
clob(XMLCLOB) | CLOB | CLOB による XML 文書 |
varchar(XMLFile) | VARCHAR | VARCHAR による XML ファイル名 |
例: 以下の例では、XMLVARCHAR を取り出し、 VARCHAR データ・タイプとしてメモリーに保管します。
EXEC SQL SELECT db2xml.varchar(order) from sales_tab
たとえば、XML 文書を XMLFILE として保管していて、 メモリー内でそれを処理したい場合、Content() UDF を使用することができます。 それは XMLFILE データ・タイプを入力として、CLOB を戻します。
Content() UDF は、指定されたデータ・タイプに応じて 2 つの異なる検索機能を実行します。 それは次のとおりです。
XMLFILE から CLOB へ: ファイルからデータを取り出して、 CLOB ロケーターにエクスポートします。
Content(xmlobj XMLFile)
XML タイプ から外部ファイルへ: XML データ・タイプとして保管されている XML の内容を取り出して、 外部ファイルにエクスポートします。
Content(xmlobj XML type, filename varchar(512))
ここで、
下記の例では、組み込み SQL のある小さな C プログラムの一部によって、 どのようにして XML 文書がファイルから取り出されてメモリーに入れられるかを示しています。 この例では、列 BOOK は XMLFILE タイプであると想定します。
EXEC SQL BEGIN DECLARE SECTION; SQL TYPE IS CLOB_LOCATOR xml_buff; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO SALES_DB EXEC SQL DECLARE c1 CURSOR FOR SELECT Content(order) from sales_tab EXEC SQL OPEN c1; do { EXEC SQL FETCH c1 INTO :xml_buff; if (SQLCODE != 0) { break; } else { /* do whatever you need to do with the XML doc in buffer */ } } EXEC SQL CLOSE c1; EXEC SQL CONNECT RESET;