16.20 - 例: コンテキスト パラメータを使用したXSLT_SHRED_BATCH - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ XMLデータ型

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1140-162K-JPN
Language
日本語 (日本)

この例では、コンテキスト パラメータをシュレッディング操作に渡す方法を示します。現在、defaultDatabaseが唯一のサポートされるコンテキスト パラメータです。

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

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

DELETE Input_Docs;
DELETE DefaultValue2;

INSERT INTO Input_Docs VALUES(1, NEW XML('
<Root>
<AllTypes>
 <Numeric>
  <Byteintc>1</Byteintc>
  <Smallintc>100</Smallintc>
  <Floatc>100</Floatc>
  <Decimalc>100</Decimalc>
  <Numberc>1100</Numberc>
 </Numeric>
</AllTypes>
<AllTypes>
 <Numeric>
  <Byteintc>2</Byteintc>
  <Smallintc>200</Smallintc>
  <Intc>200</Intc>
  <Floatc>200</Floatc>
  <Decimalc>200</Decimalc>
  <Numberc>1200</Numberc>
 </Numeric>
</AllTypes>
</Root>'));

スタイルシート マッピングによってXSLT_SHRED_BATCHストアド プロシージャを呼び出し、ステージング入力テーブルに格納されるXMLデータをシュレッドします。次の引数を呼び出しに使用します。

  • queryStringは、次のようになります: sel * from xsltuser.Input_Docs
  • xsltMapping引数は、スタイルシートを入力とするCREATEXML関数を呼び出すことで指定します。このスタイルシートは、XML文書に適用されます。
  • externalContextは、DefaultDatabase値を設定します。
  • resultCoderesで返されます。操作が成功すると0が返されます。

<defaultDatabase>の設定をメモします。

CALL TD_SYSXML.XSLT_SHRED_BATCH('sel * from xsltuser.Input_Docs', 
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">
<defaultDatabase>dummyuser2</defaultDatabase>
 <Transaction>
  <Insert>
   <Table>
    <dummyuser.DefaultValue2>
     <xsl:for-each select="AllTypes">
      <Row>
       <byteintc genexp="cast(? as byteint)">
        <xsl:value-of select="Numeric/Byteintc"/>
       </byteintc>
       <smallintc ><xsl:value-of select="Numeric/Smallintc"/></smallintc>
       <intc default="120"><xsl:value-of select="Numeric/Intc"/></intc>
       <floatc><xsl:value-of select="Numeric/Floatc"/></floatc>
      </Row>
     </xsl:for-each>
    </dummyuser.DefaultValue2>
   </Table>
  </Insert>
 </Transaction>
</xsl:template>
</xsl:stylesheet>'), 'defaultDatabase=xsltuser',:res);
結果: ターゲット テーブルで更新されたデータを表示するには次を実行します。SELECT * FROM DefaultValue2;
byteintc  smallintc         intc                  floatc
--------  ---------  -----------  ----------------------
       1        100          120   1.00000000000000E 002
       2        200          200   2.00000000000000E 002

以下に、コンテキスト パラメータの使用例をもう1つ示します。

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

DELETE Input_Docs;
DELETE Offer;

INSERT INTO Input_Docs VALUES(1,
 createxml('<?xml version="1.0"?>
	<Root>
	 <predictixOfferMessage>
		 <Offer><offerid>1000001</offerid></Offer>
		 <mediaBlock>
			 <mediaBlockid>90000000010001</mediaBlockid>
			 <parentofferid>1001</parentofferid>
		 </mediaBlock>
	 </predictixOfferMessage>
	 <predictixOfferMessage>
		 <Offer><offerid>1000002</offerid></Offer>
		 <mediaBlock>
			 <mediaBlockid>90000000010002</mediaBlockid>
			 <parentofferid>1002</parentofferid>
		 </mediaBlock>
	 </predictixOfferMessage>
	</Root>'));

スタイルシート マッピングによってXSLT_SHRED_BATCHストアド プロシージャを呼び出し、ステージング入力テーブルに格納されるXMLデータをシュレッドします。次の引数を呼び出しに使用します。

  • queryStringは、次のようになります: SEL id, xmldoc FROM xsltuser.Input_Docs
  • xsltMapping引数は、スタイルシートを入力とするCREATEXML関数を呼び出すことで指定します。このスタイルシートは、XML文書に適用されます。
  • externalContextは、defaultDatabaseをxsltuserに設定します。
  • resultCoderesで返されます。操作が成功すると0が返されます。

<defaultDatabase>の設定をメモします。

CALL TD_SYSXML.XSLT_SHRED_BATCH('SEL id, xmldoc FROM xsltuser.Input_Docs',
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">
<defaultDatabase>TestUser</defaultDatabase>
 <Transaction>
  <Insert>
   <Table>
    <Offer>
	    <xsl:for-each select="predictixOfferMessage">
	    <Row>
	     <xsl:copy-of select="Offer/offerid"/>
	     <xsl:copy-of select="mediaBlock/mediaBlockid"/>
	    </Row>
	    </xsl:for-each>
	   </Offer>
   </Table>
  </Insert>
 </Transaction>
</xsl:template>
</xsl:stylesheet>'), 'defaultDatabase=XSLTUSER',:res);
結果: ターゲット テーブルで更新されたデータを表示するには次を実行します。SELECT offerid, mediaBlockid FROM Offer;
offerid     mediaBlockid
----------  ---------------------
1000001     90000000010001
1000002     90000000010002