Oracle 11gデータベースのXML型列から値を抽出するためにEXTRACTメソッドを使用していました。私のテーブルには10行、私はoracle XMLTABLEが正常に動作していません
返された行で'/Items/OperatingSystem/@Version[contains(.,"4.04")]'
ようXPATHで、いくつかの条件を置くときEXTRACTとして は、select句で使用されている場合はXPath式がある場合
は、それはNULLを示し一致しませんが、10行すべてが表示されます。
私はXMLTABLEに移動しようとしましたが、これは最新のものです(EXTRACTは非推奨です)。わかっているように、FROM節で使用されています。私はいくつかの基本的なクエリを試して、それがXPATH式と一致する行を返すだけであることを発見しました(EXTRACTの場合に返されるNULL行をスキップします)
XMLTABLEを使用して見つかった1つの奇妙な問題は - 私のローカル環境では、
'/Items/OperatingSystem/@Version[contains(.,"4.04")]'
結果として、「Dee」を含む名前の行だけが選択されます。
しかし、私は私たちのテスト環境
に対して同じクエリを実行するときには、代わりにのみ「ディー」を含む名前を持つ選択のすべての行を選択します。 これはなぜ起こっているかのヒントが見つかりませんでした。私はAgeなどのような他のフィールドに条件を置くクエリをいくつか試してみましたが、結果は同じです。すべての行を戻しています。ここで
は、バージョンの詳細は - ローカルOracleバージョン -
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
"CORE 11.2.0.2.0 Production"
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production
テスト環境のOracleバージョン -
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
"CORE 11.2.0.3.0 Production"
TNS for HPUX: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
これらのバージョンではXMLTABLEに関連するすべての変更があります。
サンプルデータ
私は次の表
NAME | XMLDATA | CRT_TS
Ubuntu | UbuntuXMLDATA | 20-OCT-2016
Windows | WindowsXMLDATA| 20-OCT-2016
があるとしUbuntuXMLDATA
<Items>
<OperatingSystem Name="Ubuntu 12.04" Version="12.04" />
<OperatingSystem Name="Ubuntu 14.04" Version="14.04" />
<OperatingSystem Name="Ubuntu 16.04" Version="16.04" />
</Items>
WindowsXMLDATA
<Items>
<OperatingSystem Name="Windows" Version="8" />
<OperatingSystem Name="Windows" Version="7" />
</Items>
表のxmlはXMLDATA列にあります。
クエリ
select Name,rx.COLUMN_VALUE as XPATH_OUTPUT from Operating_System, XMLTABLE('/Items/OperatingSystem/@Version[contains(.,"4.04")]' PASSING XMLTYPE(XMLDATA)) rx where CRT_TS = 20-OCT-2016;
期待される結果
Name | XPATH_OUTPUT
Ubuntu | 14.04
の実績
Name | XPATH_OUTPUT
Ubuntu | 12.04
Ubuntu | 14.04
Ubuntu | 16.04
問題私はfacinていますgは上記のクエリがローカルデータベースで正常に動作しています。 しかし、テスト環境に対しては、1行ではなく3行が返されます。なぜ私は理解できませんか? Oracleバージョン(私は上記の詳細を与えている)の不一致によるものですか?
サンプルデータ、クエリ、予期しない結果があります。 – Aleksej
@Aleksejサンプルデータを提供しました。あなたが助けることができる場合は参照してください –