Oracle SQLでのXMLオブジェクトの問合せに関するエントリが多数あります。しかし、まだ、私は私の疑問に対して何の答えも見つけられませんでした。 私はいくつかの列を含むSQLテーブル( "obj")を持っています。 XML形式のclobオブジェクト(列は「定義」と呼ばれます)。 私はclobから具体的な値を抽出したいと思います。 XMLは次のようになります。Oracle SQLでのXMLオブジェクトの問合せ:オブジェクトの別の属性を指定して属性値を取得する
<?xml version="1.0" encoding="UTF-8"?>
<m>
<i n="Status">0</i>
<s n="Description">AmountDifference</s>
<s n="Name">InputvsOutput</s>
<a n="Variables">
<m>
<s n="Name">Formula</s>
<s n="Value">B-A</s>
</m>
<m>
<s n="Name">CriticalDiff</s>
<s n="Value">abs({B} - {A}) < 10</s>
</m>
</a>
</m>
SQLクエリは、2つの値を返す必要があります。説明と値の名前= CriticalDiff。
CAST(
CASE WHEN obj.definition is not null then
UTL_I18N.UNESCAPE_REFERENCE(
XMLTYPE(obj.definition).
EXTRACT('//s[@n="Description"]/text()')
.getStringVal())
END as varchar(200)) as "Rule Expression"
, obj.definition as rule_xml
私はその名前で値を取得するように、CAST-BLOKが正常に動作しているが、私は同様の方法で最後のコマンドを変換する方法を疑問に思う(=:SQLクエリの 一部は、このようになりますCriticalDiff)。
私が直面する難しさは、同じ属性名(名前、値)を持つ2つの同様の要素(m)があることです。
"CriticalDiff"から "値"属性を取得するにはどうすればよいですか?
ありがとうございます!