注意: UPDATEXML ファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。 |
構文
用途
UPDATEXML
は、引数としてXMLType
インスタンスおよびXPath値の組を取り、更新された値を持つXMLType
インスタンスを戻します。XPath_string
がXML要素の場合、対応するvalue_expr
はXMLType
インスタンスです。XPath_string
が属性またはテキスト・ノードの場合、value_expr
は任意のスカラー・データ型となります。先頭にスラッシュを付けて絶対XPath_string
を指定したり、先頭のスラッシュを省略して相対XPath_string
を指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。
各XPath_string
およびこれに対応するvalue_expr
のターゲットのデータ型は一致する必要があります。オプションのnamespace_string
は、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2
値に解決される必要があります。
XML要素を更新してNULLにした場合、属性および子要素が削除されるため、要素は空になります。要素のテキスト・ノードを更新してNULLにした場合、その要素のテキスト値が削除されるため、要素自体は残りますが空になります。
多くの場合、このファンクションはメモリー内のXML文書を実体化して、その値を更新します。ただし、UPDATEXML
は、直接オブジェクト・リレーショナル列の値を更新するように、その列でのUPDATE
文に対して最適化されます。この最適化には、次の条件があります。
XMLType_instance
は、UPDATE
... SET
句の列と同じである必要があります。
XPath_string
は、スカラー・コンテンツとなる必要があります。
例
次の例では、サンプル・スキーマ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>