説明
この関数は、指定された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