ヘッダーをスキップ
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-06
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

UPDATEXML

構文

updatexml.gifの説明が続きます。
updatexml.gifの説明

用途

UPDATEXMLは、引数としてXMLTypeインスタンスおよびXPath値の組を取り、更新された値を持つXMLTypeインスタンスを戻します。XPath_stringがXML要素の場合、対応するvalue_exprXMLTypeインスタンスです。XPath_stringが属性またはテキスト・ノードの場合、value_exprは任意のスカラー・データ型となります。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

XPath_stringおよびこれに対応するvalue_exprのターゲットのデータ型は一致する必要があります。オプションのnamespace_stringは、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

XML要素を更新してNULLにした場合、属性および子要素が削除されるため、要素は空になります。要素のテキスト・ノードを更新してNULLにした場合、その要素のテキスト値が削除されるため、要素自体は残りますが空になります。

多くの場合、このファンクションはメモリー内のXML文書を実体化して、その値を更新します。ただし、UPDATEXMLは、直接オブジェクト・リレーショナル列の値を更新するように、その列でのUPDATE文に対して最適化されます。この最適化には、次の条件があります。

次の例では、サンプル・スキーマOE(XMLType型のwarehouse_spec列を持つ)にあるSan Francisco倉庫のドック数を4に更新します。

SELECT warehouse_name,
   EXTRACT(warehouse_spec, '/Warehouse/Docks')
   "Number of Docks"
   FROM warehouses 
   WHERE warehouse_name = 'San Francisco';

WAREHOUSE_NAME       Number of Docks
-------------------- --------------------
San Francisco        <Docks>1</Docks>

UPDATE warehouses SET warehouse_spec =
   UPDATEXML(warehouse_spec,
   '/Warehouse/Docks/text()',4)
   WHERE warehouse_name = 'San Francisco';

1 row updated.

SELECT warehouse_name,
   EXTRACT(warehouse_spec, '/Warehouse/Docks')
   "Number of Docks"
   FROM warehouses 
   WHERE warehouse_name = 'San Francisco';

WAREHOUSE_NAME       Number of Docks
-------------------- --------------------
San Francisco        <Docks>4</Docks>