この例では、前述した例で定義した注釈付きスキーマ(annotatedcustomerschema.xsd)をどのように使用してサンプルXML文書Cust001.xmlをシュレッドできるかを示します。
この例で参照されているテーブルは次のように定義されています。
CREATE TABLE SHREDMAPPING ( SCHEMA_ID VARCHAR(32), ANNOTATED_SCHEMA XML ) PRIMARY INDEX (SCHEMA_ID); CREATE TABLE CUSTOMER ( customerID INTEGER, customerName VARCHAR(256), customerXML XML ) PRIMARY INDEX (customerID);
- 注釈付きスキーマをshredmappingテーブルにロードします。
.IMPORT VARTEXT '|' LOBCOLS=1 FILE=annotatedschema.txt USING (asxsd XML AS DEFERRED, schemaid varchar(32)) INSERT into SHREDMAPPING values(:schemaid, :asxsd);
annotatedschema.txtファイルの内容は次のとおりです。
annotatedcustomerschema.xsd|annotatedcustomerschema.xsd
INSERT操作後のshredmappingテーブルの内容は次のようになります(抜粋)。
SCHEMA_ID ANNOTATED_SCHEMA -------------------------------- ------------------------------------------------------ annotatedcustomerschema.xsd <?xml version="1.0" encoding="UTF-8" ?> <xs:schema...
- XML文書をcustomerテーブルにロードします。
.IMPORT VARTEXT '|' LOBCOLS=1 FILE='custdocs.txt' USING (custdoc XML AS DEFERRED, custid VARCHAR(256), custname VARCHAR(256)) INSERT INTO CUSTOMER(CAST(:custid AS INTEGER), :custname, :custdoc);
custdocs.txtファイルの内容は次のとおりです。
Cust001.xml|1|John Hancock
- ID列とシュレッドするXML文書を含むXML列の2列の結果セットを返すSQL問合わせを定義します。
SELECT customerID, customerXML FROM CUSTOMER;
この問合わせの結果の一部を以下に示します。省略記号(...)は、問合わせ結果の一部ではありません。これは、問合わせからさらに結果が返されるが、この例では省略されていることを示しています。
customerID customerXML ----------- -------------------------------------------------------------- 1 <?xml version="1.0" encoding="UTF-8" ?> <Customer> <Name>John...
- AS_SHRED_BATCHストアド プロシージャに以下の引数を指定して呼び出します。
- ステップ3で定義したSQL問合わせ
- ステップ1の注釈付きスキーマ
注釈付きスキーマは、ステップ1の結果として、SHREDMAPPINGテーブルで使用できるようになりました。これをシュレッディング ストアド プロシージャで使用できるようにする必要があります。そのための方法の1つは、ラッパー ストアド プロシージャを作成することです。
REPLACE PROCEDURE MY_SHREDBATCH_SP ( IN sourceDataQuery varchar(6000), IN annotatedSchemaID varchar(32), OUT resultCode varchar(128) ) SPMAIN:BEGIN DECLARE annotatedSchema XML; DECLARE inputCursor CURSOR FOR SELECT ANNOTATED_SCHEMA from SHREDMAPPING WHERE SCHEMA_ID = :annotatedSchemaID; OPEN inputCursor; FETCH inputCursor INTO annotatedSchema; IF (SQLSTATE <> '02000') THEN BEGIN CALL TD_SYSXML.AS_SHRED_BATCH(:sourceDataQuery, :annotatedSchema, NULL, :resultCode); END; ELSE SET resultCode = -1; END IF; CLOSE inputCursor; END SPMAIN;
このストアド プロシージャは2つのパラメータを取ります。
- シュレッディングするすべての文書を取得するSQL問合わせ
- 注釈付きスキーマのID(SHREDMAPPINGテーブルのキー)
ストアド プロシージャで、最初に注釈付きスキーマを取得し、次にそれをAS_SHRED_BATCHストアド プロシージャへの呼び出しで使用して文書のシュレッドを実行します。