例: スカラーUDFを使用したXML文書の解析 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/ncd1596241368722.ditamap
dita:ditavalPath
ja-JP/ncd1596241368722.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

スカラーUDFが有効な例の1つは、XML文書をデータベースに格納した後で、その文書をスキャンして指定された内容を返すというものです。次の外部UDFの例はXPathを使用します。XPathは、XML文書の中を移動するための構文ルールのセットです。サブストリングと類似した機能を持つXPathは、パス式を使ってXML文書内のノードを識別します。

要件によっては、XML文書をCLOB (文字ラージ オブジェクト)またはVARCHAR列として格納することも可能です。以下の図は前者を示しており、以下のプロトタイプは後者を使用しています。

この例では、XML文書がVantage内にXMLOrderという1つのVARCHAR列として格納されます。実テーブルOrderLogには、PONum列とこのVARCHAR列の2つの列だけが含まれています。XML文書をいかに示します。

    <?xml version="1.0"?>
    <ROOT>
    <ORDER>
       <DATE>8/22/2004</DATE>
       <PO_NUMBER>101</PO_NUMBER>
       <BILLTO>Mike</BILLTO>
       <ITEMS>
        <ITEM>
         <PARTNUM>101</PARTNUM>
         <DESC>Partners Conference Ticket</DESC>
         <USPRICE>1200.00</USPRICE>
        </ITEM>
        <ITEM>
          <PARTNUM>147</PARTNUM>
          <DESC>V2R5.1 UDF Programming</DESC>
          <USPRICE>28.95</USPRICE>
        </ITEM>
        </ITEMS>
    </ORDER>
    </ROOT> 

orderlogテーブルのDDLは次のようになります。

    CREATE SET TABLE orderlog, NO FALLBACK,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT (
       PONum    INTEGER NOT NULL,
       XMLOrder VARCHAR(63,000) )
    UNIQUE PRIMARY INDEX ( PONum );

次のSELECTリクエストではXpathValueUDFを参照しています。このUDFは、XPathを使ってXML文書から要素と属性の内容を抽出します。次いでXPathは、SELECTリクエストの中で渡される引数(例えばBILLTO名)を使用して表内の各文書を検索します。特定の請求先名を持つ文書が識別されると、出力引数として関連PO番号と日付が返されます。

    SELECT XPathValue(O.xmlOrder, '//ORDER/PO_NUMBER/*') AS PO_Number,
           XPathValue(O.xmlOrder, '//ORDER/DATE/*') AS theDate
    FROM OrderLog O
    WHERE XPathValue(O.xmlOrder,'//ORDER/BILLTO/*') = 'Mike'; 

XPathValue UDFを使用する問合わせの出力は次のようになります。

    PO_Number   TheDate
    ----------- ----------------
    101         8/22/2004