説明
この関数は、指定されたXMLフラグメントをターゲットXMLに挿入します。挿入位置は、XPath式で示されるノードによって決定されます。
構文
INSERTCHILDXML( XMLType_instance, XPath_string, child_expr, value_expr [, namespace_string ])
パラメータの説明
| フィールド | 説明 |
|---|---|
| XMLType_instance | ターゲットXMLドキュメントを表すXMLTypeインスタンスを指定します。 |
| XPath_string | XPath式で、1つまたは複数のサブノードを挿入する1つまたは複数のターゲットノードを指定します。絶対パス(スラッシュで始まる)または相対パス(先頭のスラッシュを省略)を使用できます。先頭のスラッシュを省略した場合、相対パスのコンテキストはデフォルトでルートノードになります。 |
| child_expr | 挿入する1つまたは複数の要素または属性ノードを指定します。 |
| value_expr | 1つまたは複数のノードを挿入するためのXMLTypeセグメントを指定します。これは文字列またはXMLTypeとして解析されなければなりません。 |
| namespace_string | オプションで、XPath_stringにネームスペース情報を提供するために使用されます。 |
説明
挿入する親ノードにネームスペースが存在する場合でも、挿入する値にネームスペースがない場合は、空のネームスペースを追加するためにイテレーションを実行する必要があります。
戻り値の型
XMLTypeデータ型を返します。
例
INSERTCHILDXML関数を使用して、ターゲットXMLにサブノードを挿入します。ここで、ターゲットXMLは<bookstore>ノードとそのサブノードです。XPath式は/bookstoreであり、サブノードを<bookstore>ノードに挿入することを示します。挿入するサブノードの名前はpriceです。挿入するサブノードの内容は、<price>99.9</price>を表すXMLTypeインスタンスです。クエリ結果はASキーワードを使用してresultに名前を変更します。最後に、dualテーブルから結果を取得します。SELECT INSERTCHILDXML( XMLtype('<bookstore> <book att="old"></book> <author>carrot</author> </bookstore>'), '/bookstore', 'price', XMLtype('<price>99.9</price>') ) AS result FROM dual;実行結果は次のとおりです:
+-----------------------------------------------------------------------------------------------+ | RESULT | +-----------------------------------------------------------------------------------------------+ | <bookstore> <book att="old"/> <author>carrot</author> <price>99.9</price> </bookstore> | +-----------------------------------------------------------------------------------------------+ 1 row in setノードを挿入します。
SELECT INSERTCHILDXML( xmltype( '<bookstore> <book att="old"></book> <author>carrot</author> </bookstore>' ), '/bookstore/book', 'a', xmltype('<a><b/></a>') ) FROM dual;実行結果は次のとおりです:
+----------------------------------------------------------------------------------------------------------------------------------------------+ | INSERTCHILDXML(XMLTYPE('<BOOKSTORE><BOOKATT="OLD"></BOOK><AUTHOR>CARROT</AUTHOR></BOOKSTORE>'),'/BOOKSTORE/BOOK','A',XMLTYPE('<A><B/></A>')) | +----------------------------------------------------------------------------------------------------------------------------------------------+ | <bookstore> <book att="old"> <a> <b/> </a> </book> <author>carrot</author> </bookstore> | +----------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in setXPathが複数見つかった場合、すべて挿入されます。
SELECT INSERTCHILDXML( xmltype( '<bookstore> <book att="old"></book> <book></book> <author>carrot</author> </bookstore>' ), '/bookstore/book', 'price', xmltype('<price>99.9</price>') ) FROM dual;実行結果は次のとおりです:
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | INSERTCHILDXML(XMLTYPE('<BOOKSTORE><BOOKATT="OLD"></BOOK><BOOK></BOOK><AUTHOR>CARROT</AUTHOR></BOOKSTORE>'),'/BOOKSTORE/BOOK','PRICE',XMLTYPE('<PRICE>99.9</PRICE>')) | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | <bookstore> <book att="old"> <price>99.9</price> </book> <book> <price>99.9</price> </book> <author>carrot</author> </bookstore> | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in setプロパティを挿入します。
SELECT INSERTCHILDXML( xmltype( '<bookstore> <book att="old"></book> <author>carrot</author> </bookstore>' ), '/bookstore/book', '@att2', 'abc' ) FROM dual;実行結果は次のとおりです:
+---------------------------------------------------------------------------------------------------------------------------------+ | INSERTCHILDXML(XMLTYPE('<BOOKSTORE><BOOKATT="OLD"></BOOK><AUTHOR>CARROT</AUTHOR></BOOKSTORE>'),'/BOOKSTORE/BOOK','@ATT2','ABC') | +---------------------------------------------------------------------------------------------------------------------------------+ | <bookstore> <book att="old" att2="abc"/> <author>carrot</author> </bookstore> | +---------------------------------------------------------------------------------------------------------------------------------+ 1 row in set