例: genexpを使用するXSLT_SHRED - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - XMLデータ型

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

この例では、XSLT_SHRED_BATCHとは異なりXSLT_SHREDに必要なgenexp宣言の使用方法を示します。

次の例のプライマリ インデックスは、更新用のキーとして使用されません。

この例を実行する前に、必要な権限を持つテスト ユーザーが作成され、必要なテーブルが作成されていることを確認します。参照整合性ルールについては、XSLT_SHRED_BATCHとXSLT_SHREDの例の設定を参照してください。

XMLソース文書を格納するために使用するステージング テーブルにデータを挿入します。

INSERT INTO DefaultValue3(C_id, C_Byteintc) values(1,1);

XSLT_SHREDストアド プロシージャを呼び出してXML文書をシュレッドします。次の引数を呼び出しに使用します。

  • この例では、NEW XML文を使用してxmlDocが自動的に作成されます。
  • xsltMapping引数は、スタイルシートを入力とするCREATEXML関数を呼び出すことで指定します。このスタイルシートは、XML文書に適用されます。
  • externalContextはNULLです。
  • resultCode:res.で返されます。操作が成功すると0が返されます。
CALL TD_SYSXML.XSLT_SHRED(NEW XML('<Root>
<AllTypes>
 <Numeric>
  <Byteintc>1</Byteintc>
  <Smallintc>200</Smallintc>
  <Intc>200</Intc>
  <Floatc>200</Floatc>
  <Decimalc>200</Decimalc>
  <Numberc>1200</Numberc>
 </Numeric>
</AllTypes>
<AllTypes>
 <Numeric>
  <Byteintc>2</Byteintc>
  <Smallintc>400</Smallintc>
  <Intc>400</Intc>
  <Floatc>400</Floatc>
  <Decimalc>400</Decimalc>
  <Numberc>1400</Numberc>
 </Numeric>
</AllTypes></Root>'), 	CREATEXML('<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/Root">
 <Transaction>
  <Update>
   <Table>
    <xsltuser.DefaultValue3 pkey="C_Byteintc">
     <xsl:for-each select="AllTypes">
      <Row>
        <C_Id genexp="cast(? as int)" default="10">
           <xsl:value-of select="Numeric/Bytec"/>
        </C_Id>
        <C_Byteintc genexp="cast(? as byteint)">
           <xsl:value-of select="Numeric/Byteintc"/>
        </C_Byteintc>
        <C_Smallintc genexp="cast(? as smallint)" >
           <xsl:value-of select="Numeric/Smallintc"/>
        </C_Smallintc> 
        <C_Intc genexp="cast(? as integer)">
           <xsl:value-of select="Numeric/Intc"/>
        </C_Intc>
      </Row>
     </xsl:for-each>
    </xsltuser.DefaultValue3>
   </Table>
  </Update>
 </Transaction>
</xsl:template>
</xsl:stylesheet>'), '',:res);

結果: ターゲット テーブルで更新されたデータを表示するには次を実行します。

SELECT * FROM DefaultValue3;

       C_Id  C_Byteintc  C_Smallintc       C_Intc
-----------  ----------  -----------  -----------
         10           1          200          200