挿入式
挿入式は、ノード・シーケンス内の指定された位置に、1 つ以上のノードのコピーを挿入します。
構文
- insert nodes または insert node
- 挿入式を開始するためのキーワード。 insert nodes または insert node は、挿入されるノード数に 関係なく有効です。
- げんりしき
- 更新式以外の XQuery 式。 source-expression の結果は、
挿入される 0 個以上のノードのシーケンスです。 これらのノードは、
挿入シーケンスと呼ばれます。 挿入シーケンスに文書ノードが含まれる場合、挿入シーケンス内のその文書ノードは、子に置き換えられます。 挿入シーケンスに 1 つ以上のアトミック値が含まれる
隣接シーケンスがある場合、アトミック値は挿入シーケンス内で
新しいテキスト・ノードに置換されます。新しいテキスト・ノードには、
それぞれのアトミック値をストリングにキャストした結果が入り、隣接するアトミック値の
間にシングル・スペース文字が挿入されます。
挿入シーケンスに、シーケンス内で 最初に現れる属性ノードが含まれている場合、その属性は、指定されたキーワードに 応じて、target-expression ノードまたはその親に 追加されます。 挿入シーケンスに含まれる属性ノードが、属性ノード以外のノードの後に続いている場合、Db2 はエラーを戻します。
- before
- source-expression ノードが
target-expression ノードの先行する兄弟になることを
指定するキーワード。
複数のノードが target-expression の前に挿入された場合、ノードは隣接した ままとなり、順序も変わりません。 挿入シーケンスに 属性ノードが含まれる場合、属性ノードは、ターゲット・ノードの親の 属性になります。
- after
- source-expression ノードが
target-expression ノードに続く兄弟になることを指定するキーワード。
複数のノードが target-expression の後に挿入された場合、ノードは隣接した ままとなり、順序も変わりません。 挿入シーケンスに 属性ノードが含まれる場合、属性ノードは、ターゲット・ノードの親の 属性になります。
- as first into
- source-expression ノードが
target-expression ノードの最初の子になることを指定するキーワード。
source-expression ノードは、 target-expression ノードの最初の子として挿入されます。 複数のノードが target-expression ノードの最初の子として挿入された場合、 ノードは隣接したままとなり、順序も変わりません。 挿入シーケンスに 属性ノードが含まれる場合、属性ノードは、ターゲット・ノードの 属性になります。
- as last into
- source-expression ノードが
target-expression ノードの最後の子に
なることを指定するキーワード。
source-expression ノードは、 target-expression ノードの最後の子として挿入されます。 複数のノードが target-expression ノードの最後の子として挿入された場合、 ノードは隣接のままとなり、順序も変わりません。 挿入シーケンスに 属性ノードが含まれる場合、属性ノードは、ターゲット・ノードの 属性になります。
- into
- as last into と同じ動作を します。
- 目標表現
- 更新式以外の XQuery 式。 target-expression の結果が空シーケンスの場合は、エラーが戻されます。 以下の規則が
target-expression に適用されます。
- キーワード before または after
が指定されている場合:
- target-expression の結果は、単一のエレメント、テキスト、処理命令、または (親のプロパティーが空ではない) コメント・ノードである必要があります。
- 挿入シーケンスに属性ノードが 含まれる場合、target-expression ノードの親はエレメント・ノードである必要が あります。
- target-expression ノードの親のプロパティーを 空にすることはできません。
- 挿入シーケンス内の属性ノードが暗示的な名前空間バインディングを持つ修飾名(QName)を持つ場合、 ターゲット式ノードの親ノードの
namespacesプロパティが、バインディングがまだない属性の名前空間接頭辞の名前空間バインディングを含めるように変更されます。 暗黙的な名前空間バインディングが、target-expressionノードの親ノードのnamespacesプロパティにおける名前空間バインディングと衝突する場合、エラーが返されます。
- into、as first into、
または as last into キーワードが指定された場合:
- target-expression の結果は、単一のエレメント、テキスト、処理命令、または (親のプロパティーが空ではない) コメント・ノードである必要があります。
- 挿入シーケンスに属性ノードが 含まれる場合、target-expression ノードは、 文書ノードにはできません。
- target-expression ノードの親のプロパティーを 空にすることはできません。
- 挿入シーケンス内の属性ノードが暗示的な名前空間バインディングを持つ修飾名(QName)を持つ場合、 ターゲット式ノードの
namespacesプロパティは、バインディングがまだない属性の名前空間接頭辞の名前空間バインディングを含めるように変更されます。 暗黙的な名前空間バインディングが、target-expressionノードのnamespacesプロパティ内の名前空間バインディングと衝突する場合は、エラーが返されます。
- キーワード before または after
が指定されている場合:
ノードを挿入した結果、同じ親のテキスト・ノードが隣接する場合、隣接するテキスト・ノードは単一のテキスト・ノードにマージされます。 結果として得られるテキスト・ノードのストリング値は、隣接するテキスト・ノードのストリング値を連結したものになります。 この場合、各ストリング値の間にスペースは追加されません。
挿入の結果が XPath 2. 0 および XQuery 1.0 データ・モデルの制約のいずれかに 違反する場合、エラーが戻されます。
例
purchaseOrder 文書が以下のようになっていると仮定します。
<ipo:purchaseOrder
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ipo="http://www.example.com/IPO"
orderDate="2008-12-01">
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Helen Zoe</name>
<street>55 Eden Street</street>
<city>San Jose</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Joe Lee</name>
<street>66 University Avenue</street>
<city>Palo Alto</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<billTo xsi:type="ipo:USAddress">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>PA</state>
<zip>95819</zip>
</billTo>
<items>
<item partNum="833-AA">
<productName>Lapis necklace</productName>
<quantity>1</quantity>
<USPrice>99.95</USPrice>
<ipo:comment>Want this for the holidays!</ipo:comment>
<shipDate>2008-12-05</shipDate>
</item>
<item partNum="945-ZG">
<productName>Sapphire Bracelet</productName>
<quantity>2</quantity>
<USPrice>178.99</USPrice>
<shipDate>2009-01-03</shipDate>
</item>
</items>
</ipo:purchaseOrder>
以下の
SQL UPDATE ステートメントでは、
新しい item ノードを、purchaseOrder 文書内の items ノードの下で最初のノードとして
挿入するための基本更新式を使用しています。
UPDATE T1
SET X1 = XMLMODIFY(
'declare namespace ipo="http://www.example.com/IPO";
insert nodes $item as first
into /ipo:purchaseOrder/items',
XMLPARSE(DOCUMENT
'<item partNum="747-BB">
<productName>Ruby Ring</productName>
<quantity>1</quantity>
<USPrice>75.50</USPrice>
<shipDate>2007-05-13</shipDate>
</item>') as "item") ステートメントの結果は次のとおりです。
<ipo:purchaseOrder
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ipo="http://www.example.com/IPO"
orderDate="2008-12-01">
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Helen Zoe</name>
<street>55 Eden Street</street>
<city>San Jose</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<shipTo exportCode="1" xsi:type="ipo:UKAddress">
<name>Joe Lee</name>
<street>66 University Avenue</street>
<city>Palo Alto</city>
<state>CA</state>
<postcode>CB1 1JR</postcode>
</shipTo>
<billTo xsi:type="ipo:USAddress">
<name>Robert Smith</name>
<street>8 Oak Avenue</street>
<city>Old Town</city>
<state>PA</state>
<zip>95819</zip>
</billTo>
<items>
<item partNum="747-BB">
<productName>Ruby Ring</productName>
<quantify>1</quantity>
<USPrice>75.50</USPrice>
<shipDate>2007-05-13</shipDate>
</item>
<item partNum="833-AA">
<productName>Lapis necklace</productName>
<quantity>1</quantity>
<USPrice>99.95</USPrice>
<ipo:comment>Want this for the holidays!</ipo:comment>
<shipDate>2008-12-05</shipDate>
</item>
<item partNum="945-ZG">
<productName>Sapphire Bracelet</productName>
<quantity>2</quantity>
<USPrice>178.99</USPrice>
<shipDate>2009-01-03</shipDate>
</item>
</items>
</ipo:purchaseOrder>
