この例では、コンテキスト パラメータをシュレッディング操作に渡す方法を示します。現在、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値を設定します。
- resultCodeは:res.で返されます。操作が成功すると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に設定します。
- resultCodeは:res.で返されます。操作が成功すると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