いや〜ほんと嫌になりますね!!
って出だしがこんなんでいいのかというと疑問ですが…
何が嫌になってるかっていうと、
Oracle XML DBに対して
Append
XML関数を使用してのUpdate文を発行したところ、うまく更新できたみたいで、
「○行が処理されました」って出力されました。
ところがどっこい、Select文を発行してみると…
何もかわっとらんじゃないかぁ〜〜〜という状況\(゜ロ\)(/ロ゜)/
何だかんだでもう一度記述をしなおしてみる…
そして
SQLリファレンスを参照してみる…
そしてどうにか動きました。
Selectしたらちゃんと更新されてます!(^^)!
でも、なんだかよくわからん…だってねぇ…エラーにもならないのに…
そんでもって成功した
SQLは下記のようなもの…
--子要素の追加
UPDATE
empinfo_xml
SET
object_value =
appendchildxml(
object_value,
'/emp:empInfo/emp:employee/emp:depts',
xmltype('
大阪
'),
'xmlns:emp="http://otnxml.oracle.co.jp/empInfo.xsd"
')
WHERE
extractValue(object_value, '/empInfo/employee/personalInfo/name') = 'Taro
Oracle'
--これでもうまくいった…名前空間はいいのか?(ーー;)
UPDATE
empinfo_xml
SET
object_value =
appendchildxml(
object_value,
'/empInfo/employee/depts',
xmltype('
大阪
')
')
WHERE
extractValue(object_value, '/empInfo/employee/personalInfo/name') = 'Taro
Oracle'
あとは、insertChild
XMLも試したけど…appendChild
XMLとの明確な違いが
記載されてないような気もするけど、「
Oracle XML DB開発者ガイド」を
ちゃんと観れば書いてあるのかなぁ?
あともう1つちょっと疑問なもんが…
UPDATE
empinfo_xml
SET
object_value =
insertxmlbefore(
object_value,
'/empInfo/employee/depts/dept[2]',
xmltype('
ハルピン
')
)
WHERE
extractValue(
object_value,
'/empInfo/employee/personalInfo/name'
) = 'Taro
Oracle'
だとちゃんといくのだけど、
--insertxmlbefore これで[@status = "now"]で試したけどできなかった…↓のはOK
UPDATE
empinfo_xml
SET
object_value =
insertxmlbefore(
object_value,
'/empInfo/employee/depts/dept[@status="now"]',
xmltype('
ハルピン')
)
WHERE
extractValue(object_value, '/empInfo/employee/personalInfo/name') = 'Taro
Oracle'
だと実行結果の件数は正しいけど、実際データが入ってなかったり…
なんだか名前空間もだけど、どう
XMLを解析してるのかとか
そんなところを疑問に思ってしまいます。
まぁ私自身の理解度の不足も要因にはなるのですが(@_@;)