例: XML文書のシュレッディング

Teradata® Database XMLデータ型

brand
Software
prodname
Teradata Database
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1140-162K-JPN

この例では、前述した例で定義した注釈付きスキーマ(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);
  1. 注釈付きスキーマを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...
  2. 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
  3. ID列とシュレッドするXML文書を含むXML列の2列の結果セットを返すSQL問合わせを定義します。
    SELECT customerID, customerXML FROM CUSTOMER;

    この問合わせの結果の一部を以下に示します。省略記号(...)は、問合わせ結果の一部ではありません。これは、問合わせからさらに結果が返されるが、この例では省略されていることを示しています。

    customerID customerXML
    ----------- --------------------------------------------------------------
              1 <?xml version="1.0" encoding="UTF-8" ?> <Customer>  <Name>John...
  4. 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つのパラメータを取ります。

      1. シュレッディングするすべての文書を取得するSQL問合わせ
      2. 注釈付きスキーマのID(SHREDMAPPINGテーブルのキー)

      ストアド プロシージャで、最初に注釈付きスキーマを取得し、次にそれをAS_SHRED_BATCHストアド プロシージャへの呼び出しで使用して文書のシュレッドを実行します。