Oracle DB君がすねてる?

いや〜ほんと嫌になりますね!!
って出だしがこんなんでいいのかというと疑問ですが…

何が嫌になってるかっていうと、Oracle XML DBに対して
AppendXML関数を使用しての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'


あとは、insertChildXMLも試したけど…appendChildXMLとの明確な違いが
記載されてないような気もするけど、「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を解析してるのかとか
そんなところを疑問に思ってしまいます。
まぁ私自身の理解度の不足も要因にはなるのですが(@_@;)