Oracle データベースにある XML からさまざまなデータを選択しようとしています。次に、それらの項目を通常の SQL クエリ用の別のテーブルに挿入できます (つまり、XML を細断処理します)。したがって、Oracle データベースの Clob 列である列に以下の XML データがあります。この例を使用してそれを行いました。
XML データ
<?xml version="1.0" encoding="utf-8"?>
<CarParkDataImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.transportdirect.info/carparking B:/CODE/carparks/CarParking.xsd" xmlns="http://www.transportdirect.info/carparking">
<CarPark>
<CarParkRef>3</CarParkRef>
<CarParkName>Nunnery Lane</CarParkName>
<Location>York</Location>
<Address>Nunnery Lane--York--North Yorkshire</Address>
<Postcode>YO23 1AA</Postcode>
<Telephone>01904551309</Telephone>
<MinCostPence>200</MinCostPence>
<IsParkAndRide>false</IsParkAndRide>
<StayType>Short</StayType>
</CarPark>
</CarParkDataImport>
私はこのクエリから始めました
select car.ref as car_ref
, car.loc as car_loc
from XML_DOCUMENTS
, xmltable('/CarParkDataImport/CarPark'
passing XML_DOCUMENTS.XMLDOC
columns
"ref" varchar2(30) path 'CarParkRef'
, "loc" varchar2(30) path 'Location'
) car
しかし、私はエラーメッセージを受け取ります、
ORA-00932: inconsistent datatypes: expected - got CLOB
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
Error at Line: 5 Column: 24
その列がXMLTYPE列であることを期待しているので、この列を使用してテーブルを作成し、そこにXMLを挿入しようとしましたが、列はすべて(XMLTYPE)でした。これを機能させるには、スキーマを登録する必要があると思います、しかし登録スキーマは有効なxmlではないことを訴えたので、あきらめてCLOBに戻りました。
抽出値を使用した 2 番目のクエリは機能しているようですが、null が返されます
SELECT EXTRACTVALUE(xmltype(xmldoc), '/CarParkDataImport/CarPark/Location')
FROM xml_documents;
XMLDOC 列に 9 行あり、9 行が見つかりましたが、すべて null と表示されます。次に、以下のように提案された別の解決策を試しました
with src as (select xmltype(to_clob(XMLDOC)) /*)*/ AS messagetext FROM xml_documents)
select car.REF as car_ref
, car.LOC as car_loc
from src s
, xmltable('/CarParkDataImport/CarPark'
passing S.messagetext
columns
"REF" varchar2(30) path 'CarParkRef'
, "LOC" varchar2(30) path 'Location'
) car
;
これは、実行された場合と同じ効果があるように見えますが、何も戻りません。
私は何が欠けていますか?名前空間を宣言する必要がありますか? パスがおかしくなっていますか、それとも XMLTYPE 列へのロードに戻る必要がありますか?