次の例では、一時列での<xsl:value-of select="">マッピング定義の使用方法を示します。一時列の値を使用して、ターゲット テーブルの列の値を計算します。高度にカスタマイズされた計算が必要な場合のユーザー定義関数など、任意の有効なSQL式を使用してこの計算を実行できます。関連付けられているデータ項目自体は、ターゲット テーブルに挿入されません。
次の構文は、C_Name列の計算で使用されているC_Name_Transient列を示しています。
すべての一時列には、有効なSQLデータ型を持つsqltype属性が必要です。これは、この列がターゲット テーブルに存在しないためです。
<Row> <C_Id><xsl:value-of select="/Id " /></C_Id> <C_Name_Transient sqltype=”varchar(30)” transient=”true”> <xsl:value-of select=" …../NameTransent " /> </ C_Name_Transient > < C_Name sqlexpr=”true”><![CDATA[‘HYD_’ || C_Name_Transient]]> < C_Name > . . . </Row>
この例を実行する前に、必要な権限を持つテスト ユーザーが作成され、必要なテーブルが作成されていることを確認します。参照整合性ルールについては、XSLT_SHRED_BATCHとXSLT_SHREDの例の設定を参照してください。
XMLソース文書を格納するために使用するステージング テーブルにデータを挿入します。
INSERT INTO TransientTbl_Docs values(1, CREATEXML('<?xml version="1.0"?> <Customers> <Customer> <C_Id>100</C_Id> <C_Name>EMP_ABCD</C_Name> <C_Sal_Transient>1200</C_Sal_Transient> </Customer> <Customer> <C_Id>200</C_Id> <C_Name>EMP_XYZ</C_Name> <C_Sal_Transient>1300</C_Sal_Transient> </Customer> </Customers>'));
スタイルシート マッピングによってXSLT_SHRED_BATCHストアド プロシージャを呼び出し、ステージング入力テーブルに格納されるXMLデータをシュレッドします。次の引数を呼び出しに使用します。
- queryStringは、次のようになります: SEL * FROM xsltuser.TransientTbl_Docs.
- xsltMapping引数は、スタイルシートを入力とするCREATEXML関数を呼び出すことで指定します。このスタイルシートは、XML文書に適用されます。
- この例では、externalContextはNULLです。
- resultCodeは:res.で返されます。操作が成功すると0が返されます。
CALL TD_SYSXML.XSLT_SHRED_BATCH('sel * from xsltuser.TransientTbl_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="/Customers"> <Transaction> <Insert> <Table> <xsltuser.TransientTbl> <xsl:for-each select="Customer"> <Row> <xsl:copy-of select="C_Id"/> <xsl:copy-of select="C_Name"/> <C_Sal_Transient sqltype="Int" transient="true"> <xsl:value-of select="C_Sal_Transient" /> </C_Sal_Transient> <C_Sal sqlexpr="true">100 * C_Sal_Transient</C_Sal> </Row> </xsl:for-each> </xsltuser.TransientTbl> </Table> </Insert> </Transaction> </xsl:template> </xsl:stylesheet>'), NULL, :res);
結果: ターゲット テーブルで更新されたデータを表示するには次を実行します。SEL * FROM TransientTbl;
C_Id C_Name C_Sal ------ ------------ ----------- 200 EMP_XYZ 130000 100 EMP_ABCD 120000