例: 不在列または空の列のXSLT_SHRED_BATCHデフォルト値 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - XMLデータ型

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/kxe1590704060061.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1140
Product Category
Software
Teradata Vantage

<xsl:value-of>を持つcolumn要素は、defaultという属性を持つことができます。defaultを指定すると、その値は不在/空の要素で挿入されます。それ以外の場合、Teradata NULLが返されます。

以下に、デフォルト値を使用する構文を示します。

<Row>
      <C_Name default=”Teradata Employee” >
          <xsl:value-of select=" …../AbsentOREmptyElement" />
      </C_Name >
</Row>

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

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

DELETE Input_Docs;
DELETE DefaultValue;

INSERT INTO Input_Docs(1,NEW XML('
<Root>
 <AllTypes>
  <DateTime>
	  <Datec>2000-09-09</Datec>
	  <Timec>12:12:12</Timec>
	  <Timewzc>12:12:12+00:00</Timewzc>
	  <TimeStampc>2000-09-09T12:12:12</TimeStampc>
	  <TimeStampwzc>2000-09-09T12:12:12+00:00</TimeStampwzc>
  </DateTime>
 </AllTypes>
 <AllTypes>
  <DateTime>
	  <Datec>3000-09-09</Datec>
	  <Timec>12:12:12</Timec>
	  <Timewzc>12:12:12+00:00</Timewzc>
	  <TimeStampc>3000-09-09T12:12:12</TimeStampc>
  </DateTime>
 </AllTypes>
</Root>'));

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

  • queryStringは、次のようになります: SELECT id, xmldoc FROM xsltuser.Input_Docs
  • xsltMapping引数は、スタイルシートを入力とするCREATEXML関数を呼び出すことで指定します。このスタイルシートは、XML文書に適用されます。
  • この例では、externalContextはNULLです。
  • resultCode:res.で返されます。操作が成功すると0が返されます。
CALL TD_SYSXML.XSLT_SHRED_BATCH('SELECT 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" 
xmlns:date="http://exslt.org/dates-and-times"  
extension-element-prefixes="date" version="1.0" >
<xsl:param name="XML_TimeStamp" select="date:date-time()"/>
<xsl:template match="/Root">
 <Transaction>
  <Insert>
   <Table>
    <xsltuser.DefaultValue>
     <xsl:for-each select="AllTypes">
      <Row>
       <datec><xsl:value-of select="DateTime/Datec"/></datec>
       <timec><xsl:value-of select="DateTime/Timec"/></timec>
       <timewzc><xsl:value-of select="DateTime/Timewzc"/></timewzc>
       <timestampc>
         <xsl:value-of select="DateTime/TimeStampc"/>
       </timestampc>
       <timestampwzc default="{$XML_TimeStamp}">
         <xsl:value-of select="DateTime/TimeStampwzc"/>
       </timestampwzc>
      </Row>
     </xsl:for-each>
    </xsltuser.DefaultValue>
   </Table>
  </Insert>
 </Transaction>
</xsl:template>
</xsl:stylesheet>'), '',:res);
結果: ターゲット テーブルで更新されたデータを表示するには次を実行します。SELECT * FROM DefaultValue;
Timestampwzc列の最後のタイムスタンプはデフォルト値です。
datec timec timewzc timestampc timestampwzc
2000/09/09 04:12:12.000000 12:12:12.000000+00:00 2000-09-09 05:12:12.000000 2000-09-09 12:12:12.000000+00:00
3000/09/09 04:12:12.000000 12:12:12.000000+00:00 3000-09-09 05:12:12.000000 2014-11-04 15:22:56.000000-08:00