挿入式

挿入式は、ノード・シーケンス内の指定された位置に、1 つ以上のノードのコピーを挿入します。

構文

構文図を読むビジュアルシンタックスダイアグラムをスキップするinsert nodesnode げんりしき beforeafteras first intoas last intointo 目標表現
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 プロパティにおける名前空間バインディングと衝突する場合、エラーが返されます。
    target-expression ノードの親が 文書ノードで、before または after が指定された 場合、挿入シーケンスに属性ノードを含めることはできません。
  • intoas first into、 または as last into キーワードが指定された場合:
    • target-expression の結果は、単一のエレメント、テキスト、処理命令、または (親のプロパティーが空ではない) コメント・ノードである必要があります。
    • 挿入シーケンスに属性ノードが 含まれる場合、target-expression ノードは、 文書ノードにはできません。
    • target-expression ノードの親のプロパティーを 空にすることはできません。
    • 挿入シーケンス内の属性ノードが暗示的な名前空間バインディングを持つ修飾名(QName)を持つ場合、 ターゲット式ノードの namespaces プロパティは、バインディングがまだない属性の名前空間接頭辞の名前空間バインディングを含めるように変更されます。 暗黙的な名前空間バインディングが、target-expressionノードの namespaces プロパティ内の名前空間バインディングと衝突する場合は、エラーが返されます。

ノードを挿入した結果、同じ親のテキスト・ノードが隣接する場合、隣接するテキスト・ノードは単一のテキスト・ノードにマージされます。 結果として得られるテキスト・ノードのストリング値は、隣接するテキスト・ノードのストリング値を連結したものになります。 この場合、各ストリング値の間にスペースは追加されません。

挿入の結果が 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>