|
Oracle XML DBを使用したXMLとリレーショナル・データの格納、問合せ、およびアクセス
このチュートリアルでは、Oracle XML DBのXMLとリレーショナル・データの格納、問合せ、およびアクセスを行う方法について説明します。
約30分
このチュートリアルでは、以下のトピックについて説明します。
このアイコンの上にカーソルを置くと、すべてのスクリーンショットがロードし、表示されます。 (警告: すべてのスクリーンショットが同時にロードされるため、ご使用のインターネット接続によってはレスポンス・タイムが遅くなる場合があります。)
注: 各手順に関連したスクリーンショットのみを表示する場合は、それぞれの手順にあるアイコンの上にカーソルを置いてください。 スクリーンショットをクリックすると、非表示になります。
Oracle9i Database Release 2以来、Oracle XML DBは、Oracleデータベースにシームレスに統合され、高パフォーマンスなネイティブ記憶域を実装し、XMLデータの取得、および管理を実現しています。 新しくリリースされたOracle Database 11g Oracle XML DBは、XMLおよびSOAアプリケーション開発者が使いやすいように、XMLデータを管理するDBAのタスクを簡素化する豊富な新機能を実装して進化しました。 Oracle XML DBでは、複数のデータベース・ネイティブなXML記憶域モデルとXML索引付けスキーム、SQL/XML標準操作、W3C標準のXQueryデータ・モデルとXQuery/XPath言語、データベース・ネイティブなWebサービス、高性能なXMLパブリッシング、XML DBリポジトリ、およびバージョニングとアクセス制御をサポートします。 このチュートリアルでは、前述の項目に加えて、XMLとリレーショナル・データの格納、問合せ、変換、およびアクセスを行うためのOracle XML DBの主要な新機能について説明します。 バイナリXML記憶域モデル バイナリXMLは、構造化(オブジェクト・リレーショナル)記憶域および非構造化(CLOB)記憶域の既存のネイティブ記憶域モデルを結合するXMLType抽象データ型の新しい記憶域モデルです。 バイナリXML記憶域では、非構造化記憶域よりも効率的なデータベースの格納、更新、索引付け、およびフラグメントの抽出を実現します。 非構造化記憶域よりも優れた問合せのパフォーマンスを提供できるので、XML解析のボトルネックに困ることはありません(解析後の永続化モデルです)。 構造化記憶域のように、バイナリXML記憶域はXMLスキーマ・データ型を認識するので、ネイティブ・データベース・データ型を活用できます。 非構造化記憶域のようにデータベースの挿入中または取得中にデータ変換は必要ありません。 構造化記憶域のように、バイナリXML記憶域では、部分更新を許可します。 バイナリXMLデータはデータベースの外部でも使用できるので、効率的なXML交換媒体として役立ちます。また、多くの場合、データベースから作業を切り離して全体のパフォーマンスを向上できます。 非構造化記憶域のように、バイナリXMLデータはドキュメント順に保存されます。 構造化記憶域のように、データとメタデータは、バイナリ記憶域を使用して、データベース・レベルで効率的に分割できます。 ただし、非構造化記憶域のように、バイナリ記憶域はデータとメタデータの混在を許可しているので、インスタンス構造が変化します。 バイナリXML記憶域では、構造化記憶域モデルで多くのデータベース表と結合を使用する場合に必要な非常に複雑な可変データを使用できます。 他のXMLType記憶域モデルとは異なり、XMLスキーマが事前にわからなくてもXMLスキーマ・ベース・データのバイナリ記憶域を使用できます。また、同じ表に複数のXMLスキーマを格納し、一般的な要素で問合せを実行できます。
バイナリXMLと非構造化XML記憶域モデルのXMLIndex索引付け Bツリー索引は、構造化記憶域とともに使用し、ターゲットのオブジェクトに直接フォーカスを当てて指定することができます。 ただし、バイナリXMLまたはCLOBインスタンスに格納されたXML文書の詳細な構造(要素と属性)を処理する場合は、効果的ではありません。 これは、XMLIndexの特殊な領域(バイナリXMLと非構造化記憶域モデル)です。 各XML要素または属性を表す特定の列に定義するBツリー索引とは異なり、XMLIndex索引は、非常に汎用的です。 XMLIndexの索引付けは、XMLデータの可能性のあるすべてのXPath式に適用されます。XMLIndex索引は、他の索引付け方法と比べて以下の利点があります。
- XMLIndex索引は、SQL/XML関数(XMLExists()、XMLTable()、およびXMLQuery())に使用できます。問合せのどの部分にも有効で、WHERE句での使用に制限されません。 これは、XMLデータを使用する他の種類の索引には当てはまりません。
- XMLIndexは、SELECTリスト・データおよびFROMリスト・データへのアクセスを高速化できるので、特にXMLフラグメントの抽出に役立ちます。
- 問合せに使用されるXPath式の事前知識は必要ありません。 XMLIndexは、非常に汎用的です。 これは、ファンクション索引には当てはまりません。
- XMLスキーマ・ベースのデータまたはXMLスキーマ・ベースではないデータのXMLIndex索引を使用できます。 バイナリXMLおよび非構造化記憶域モデルと使用できます。 Bツリー索引付けは、オブジェクト・リレーショナルに格納される(構造化記憶域)スキーマ・ベースのデータのみに効果的です。バイナリXMLまたはCLOBインスタンスに格納されるXMLスキーマ・ベースのデータには効果がありません。
- コレクション(ドキュメント内で何度も発生するノード)を対象とするXPath式での検索にXMLIndex索引を使用できます。 これは、ファンクション索引には当てはまりません。
Oracleデータベース・ネイティブXQuery XQueryがW3C標準になったため、ITコミュニティは、XMLおよびXQueryをビジネスで使用し始めました。 商用データベース・テクノロジの革新的なリーダーとして、Oracle Database 11gは、従来のOracleデータベース・サーバーに統合されているすべての機能を備えたネイティブXQueryエンジンを提供します。SQL側のSQL/XML標準は、SQLでXMLをカプセル化してXQueryによるXMLの問合せを統合する方法を定義しています。 この実現のために、XQueryを使用してXML値およびSQL値を操作するXMLQuery、XMLTable、XMLExists、およびXMLCastなどの新しいSQL関数を導入しています。 Oracle Database 11gでは、これらのSQL標準関数を通じてデータベース・サーバーのXQueryサポートを実現します。 新しいXQUERYコマンドは、SQL*Plusにも実装されています。ユーザーは、コマンドラインにXQuery式を入力できます。 XQueryの標準ベースの実装によって、アプリケーション開発者は、お気に入りのAPI(JDBC、ODP.NET、Webサービスなど)を使用して、Oracle DatabaseのXQuery機能にアクセスできます。
Oracle XQueryの利点 構造化記憶域モデル、非構造化記憶域モデル、およびバイナリXML記憶域モデルの索引付けスキームとともにSQL/XML XQuery関数を使用すると、XMLデータベースは、XML問合せのDOMベースの機能評価でパフォーマンスを大幅に向上させて、異なる記憶域モデルで統一されたXML問合せを実行できます。 また、XML問合せは、SQLリレーショナル問合せをシームレスにマージして、すべての問合せシナリオを処理できます。 Oracle XML DBのXML問合せ機能は、信頼性、可用性、拡張性が高く非常にセキュアな業界最高のリレーショナル・データベースの強固な基盤に基づいて構築されています。 つまり、Oracle Database 11gのXMLデータベースの問合せは、多様性、拡張性、同時実行性、および高い性能を備えたXMLアプリケーションの最も包括的かつ効率的な機能を提供します。
トピック・リストに戻る
このチュートリアルを実行する前に、次の手順を完了している必要があります。
| 1. |
Oracle Database 11gのインストールおよびOEユーザーとHRユーザーのロック解除の確認。 |
| 2. |
Oracle Database 11gの接続に必要な環境変数の設定。 |
| 3. |
作業ディレクトリ(wkdir)へのxmldb_trg.zipファイルのダウンロードおよび解凍。
|
前提条件の追加の注意事項
Oracle Database 11gのインストール中にOEユーザーおよびHRユーザーのロックが解除されていない場合、以下の手順を実行します。
a. 端末ウィンドウを開いて、以下のコマンドを入力します。
sqlplus sys/oracle as sysdba;
b. sysとして接続した後、OEおよびHRのアカウントのロックを解除します。次に、DBAロールをOEおよびHRに付与します。 SELECT_CATALOG_ROLEをOEに付与します。 SQL*Plusウィンドウで、以下のコマンドを入力します。 または、以下のaccounts.sqlスクリプトを実行します。
ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK; ALTER USER OE IDENTIFIED BY OE ACCOUNT UNLOCK ; GRANT DBA to OE, HR; GRANT SELECT_CATALOG_ROLE TO OE;
環境変数を設定してOracle Database 11gに接続するには、以下の手順を実行します。
a. 端末ウィンドウを開いて、.bash_profileを検索します。
b. .bash_profileを編集して、以下の点を確認します。
- ORACLE_HOME環境変数が設定されている。
- ORACLE_HOME/libがLD_LIBRARY_PATH環境変数に追加されている。
たとえば、ORACLE_HOMEが$ORACLE_BASE/product/11.1.0/db_1、JAVA_HOMEが/home/oracle/jdk1.5.0_05の場合、.bash_profileに以下のエントリが含まれていることを確認してください。
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib ORACLE_BASE=/u01/app/oracle ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1 ORACLE_SID=orcl JAVA_HOME=/home/oracle/jdk1.5.0_05 PATH=$JAVA_HOME/bin:$PATH PATH=$ORACLE_HOME/bin:$PATH
CLASSPATH=$ORACLE_HOME/jdbc/lib/ojdbc.jar:$ORACLE_HOME/jlib/orai18n.jar export PATH export ORACLE_BASE ORACLE_HOME ORACLE_SID JAVA_HOME LD_LIBRARY_PATH
c. .bash_profileを変更した後、以下のようにスクリプトを実行します。
./.bash_profile
トピック・リストに戻る
XMLスキーマは、Oracle Database 11gに付属のサンプル・スキーマにOEスキーマの一部として提供されます。 ここでは、Oracle Enterprise Managerを使用して、その内容を確認します。 以下の手順を実行します。
| 1. |
ブラウザを開き、次のURLを入力します。
https://<hostname>:1158/em
次の詳細を入力し、Connect Asのデフォルト値を受け入れます。
ユーザー名: system パスワード: oracle
「Login」をクリックします。

|
| 2. |
Oracle Enterprise Manager 11g Database Controlウィンドウが表示されます。 「Schema」タブをクリックします。
|
| 3. |
XML Databaseの下の「Configuration」リンクを選択します。

|
| 4. |
FTP Portに2100、HTTP Portに8080を入力します。 「OK」をクリックします。

|
| 5. |
構成が設定されました。 「Database」をクリックします。
|
| 6. |
「Schema」→「XML Database」へ移動し、「Resources」リンクを選択します。


|
| 7. |
すべてのリソースが表示されます。 「home」を開きます。

|
| 8. |
「OE」→「PurchaseOrders」→「2002」→「Apr」を開いて、XML文書のリストを表示します。 リストの最初のXML文書をクリックします。

|
| 9. |
ドキュメントの一般的な情報が表示されます。 ドキュメントの実際の内容を参照するには、「Display Contents」をクリックします。

|
| 10. |
ファイルの内容が表示されます。 「Show formatted XML Content」をクリックします。

|
| 11. |
フォーマットされたXML文書を確認します。 終了したら、ウィンドウを閉じます。

|
| 12. |
「Database」をクリックします。

|
| 13. |
「Schema」→「XML Database」へ移動します。 次に、「XMLType Tables」をクリックします。


|
| 14. |
XMLType Tables検索ウィンドウのObject NameにSYSTEMが表示されます。 SYSTEMを削除し、「Go」をクリックします。

|
| 15. |
「PURCHASEORDER」表名をクリックします。

|
| 16. |
表の定義が表示されます。 詳細を参照するには、下方向にスクロールします。 「OK」をクリックします。


|
| 17. |
Oracle Enterprise Manager 11gをログアウトするには、「Logout」をクリックします。

|
トピック・リストに戻る
ここでは、バイナリXML表を作成し、PURCHASEORDER表で選択したデータを行に挿入します。このチュートリアル全体でOracle SQL Developerを使用します。 以下の手順を実行します。
トピック・リストに戻る
Oracle SQL Developerの起動
以下の手順を実行します。
| 1. |
端末ウィンドウを開いて、Oracle SQL Developerのインストール場所へ移動します。 次に、Oracle SQL Developerを開始します。 次のコマンドを使用します。
cd /u01/app/oracle/product/11.1.0/db_1/sqldeveloper sh sqldeveloper.sh

|
| 2. |
OEユーザーとしてデータベース接続を作成する必要があります。 以下の手順を実行します。
a. Connectionsタブで、「Connections」を右クリックし、「New Connection」を選択します。

b. New/Select Database Connectionウィンドウが表示されます。 次の詳細を入力し、「Test」をクリックして、接続が正しく設定されていることを確認します。
接続名: oe ユーザー名: oe パスワード:oe ホスト名: localhostまたは<hostname> リモート・マシンを使用している場合 ポート: 1521 SID: orcl
Save Passwordチェック・ボックスを選択すると、パスワードがXMLファイルに保存されます。 このため、Oracle SQL Developer接続を閉じて再度開いた場合、パスワードの入力が要求されません。
c. テストのStatusにSuccessと表示されます。 「Connect」をクリックします。
|
| 3. |
Autotraceパラメータを設定します。 以下の手順を実行します。
a. 「Tools」→「Preferences」へ移動します。

b.「Database」を開いて、「Autotrace Parameters」を選択します。

c. 次のチェック・ボックスが選択されていることを確認し、「OK」をクリックします。
Object_Name Cost Cardinality

|
上記の項では、Oracle SQL Developerに接続する方法とAutotraceパラメータを設定する方法を学習しました。
| 1. |
バイナリXML記憶域でXMLType表を作成し、PURCHASEORDERS表で選択したデータを表に移入します。 create_s1_bix_table.sqlスクリプトを実行します。 以下の手順を実行します。
a. 「Enter SQL Statement」ボックスを右クリックし、「Open File」を選択します。

b. 作業ディレクトリの場所を参照し、「<filename>」ファイルを選択します。 次に「Open」をクリックします。

c. SQL WorksheetのEnter SQL Statementボックスにコードが表示されます。 「Run Script」アイコンをクリックします。 または、[F5]を押します。 結果がScript Outputペインに表示されます。
create_s1_bix_table.sql DROP table po_sl_bix_table purge; / CREATE TABLE PO_SL_BIX_TABLE OF XMLType XMLType STORE AS BINARY XML; / INSERT INTO po_sl_bix_table SELECT object_value from purchaseorder; /

注:このチュートリアルでは、Oracle SQL Developerでスクリプト・ファイルを実行するには、上記のaからcの手順を実行する必要があります。マウス・ポインタで単一の文を実行する場合、「Execute Statement」アイコンをクリックします。 または、カーソルを文の上に配置して、[F9]を押します。
|
上記のトピックでは、バイナリXML記憶域でXMLType表を作成する方法を学習しました。 また、データをこの表に移入する方法も学習しました。
トピック・リストに戻る
索引を作成して、XQueryのパフォーマンスを向上できます。 ここでは、オブジェクト・リレーショナル・記憶域のBツリー索引とバイナリ記憶域表のXMLIndex索引を作成します。 次に、オブジェクト・リレーショナル表およびバイナリXML表に対してSQL/XML XQuery式を実行して、EXPLAIN PLANを確認します。パフォーマンスが向上していることに注意してください。 以下の手順を実行します。
| 1. |
SQLDeveloperセッションで、OEユーザーとして接続します。 次に、createXMLIndexesスクリプトを実行します。
set echo on -- B-tree indexes for O-R storage drop index iPurchaseOrderUser; drop index iPurchaseOrderRef; drop index iLineItemPartNumber; drop index iPartNumber; drop index iDESCRIPTION_FULL_TEXT;
-- XMLIndex indexes for binary XML storage drop index po_sl_xmlindex_bix_ix force; drop index po_sl_bix_text_ix;
create index iPurchaseOrderUser on PurchaseOrder (extractValue(object_value,'/PurchaseOrder/User')) / create index iPurchaseOrderRef on PurchaseOrder (extractValue(object_value,'/PurchaseOrder/Reference')) /
create index iLineItemPartNumber on LINEITEM_TABLE (ITEMNUMBER, PART.PART_NUMBER, NESTED_TABLE_ID) compute statistics / create index iPartNumber on LINEITEM_TABLE (PART.PART_NUMBER, NESTED_TABLE_ID) compute statistics /
-- Create XML index on the binary XML table create index po_sl_xmlindex_bix_ix on po_sl_bix_table(object_value) indextype is xdb.xmlindex parameters ('PATH TABLE po_sl_bix_path_table PATH ID INDEX po_sl_bix_path_id_ix ORDER KEY INDEX po_sl_bix_order_key_ix VALUE INDEX po_sl_bix_value_ix') /
-- Create a secondary text index on the VALUE column of the path table CREATE INDEX po_sl_bix_text_ix ON po_sl_bix_path_table (VALUE) INDEXTYPE IS CTXSYS.CONTEXT parameters ('transactional') /
call dbms_stats.gather_table_stats(USER,'PURCHASEORDER') / call dbms_stats.gather_table_stats(USER,'LINEITEM_TABLE') / call dbms_stats.gather_table_stats(USER,'po_sl_bix_table') / call dbms_stats.gather_index_stats(USER,'iPurchaseOrderUser') / call dbms_stats.gather_index_stats(USER,'iPurchaseOrderRef') / call dbms_stats.gather_index_stats(USER,'iLineItemPartNumber') / call dbms_stats.gather_index_stats(USER,'iPartNumber') / call dbms_stats.gather_index_stats(USER,'po_sl_xmlindex_bix_ix') / call dbms_stats.gather_index_stats(USER,'po_sl_bix_text_ix') /





|
| 2. |
索引が作成されたので、EXPLAIN PLANを参照し、SQL/XML XQuery式のパフォーマンスを確認します。 EXPLAIN PLANで適用可能な索引が選択されていることを確認します。 まず、特定の発注書を確認する問合せの実行計画を参照します。Enter SQL Statementボックスで、以下の手順を実行します。
a. 「XQuery03a」ファイルを開きます。コードがEnter SQL Statementボックスに表示されます。 次に、「Autotrace」アイコンをクリックします。 IPURCHASEORDERREF索引の使用に注意してください。
XQuery03aのコード: --Xquery: Review a specific purchase order
SELECT XMLQuery('/PurchaseOrder/ShippingInstructions/name' passing object_value returning content) FROM PURCHASEORDER WHERE XMLEXISTS('/PurchaseOrder[Reference="SBELL-2002100912333601PDT"]' passing object_value) /

b. 「XQuery03b」ファイルを開いて、「Autotrace」アイコンをクリックします。 XMLIndex索引の使用に注意してください。
XQuery03bのコード: -- Same query on a binary storage table SELECT XMLQuery('/PurchaseOrder/ShippingInstructions/name' passing object_value returning content).getStringVal() FROM PO_SL_BIX_TABLE WHERE XMLEXISTS('/PurchaseOrder[Reference="SBELL-2002100912333601PDT"]' passing object_value) /

|
| 3. |
特定の部品IDの記載されたすべての発注書を確認する問合せの実行計画を参照します。
a. 「XQuery04a」ファイルを開きます。 コードがEnter SQL Statementボックスに表示されます。 次に、「Autotrace」アイコンをクリックします。 IPARTNUMBERの使用に注意してください。
XQuery04aのコード: --List the purchase orders References having a particular part id
SELECT XMLQuery('/PurchaseOrder/Reference' passing object_value returning content) FROM PURCHASEORDER WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Part[@Id="717951002372"]' passing object_value) /

b.「XQuery04b」ファイルを開いて、「Autotrace」アイコンをクリックします。 XMLIndex索引の使用に注意してください。
XQuery04bのコード: --Same query on binary storage table SELECT XMLQuery('/PurchaseOrder/Reference' passing object_value returning content).getStringVal() FROM PO_SL_BIX_TABLE WHERE XMLExists('/PurchaseOrder/LineItems/LineItem/Part[@Id="717951002372"]' passing object_value) /

|
| 4. |
特定の発注書の各品目についての説明を一覧で表示する問合せの実行計画を参照します。
a. 「XQuery05a」ファイルを開きます。コードがEnter SQL Statementボックスに表示されます。 次に、「Autotrace」アイコンをクリックします。
XQuery05aのコード: -- 1. List the description for each item on the purchase order
SELECT XMLQuery('/PurchaseOrder/LineItems/LineItem/Description' passing object_value returning content) FROM PURCHASEORDER WHERE XMLExists('/PurchaseOrder[Reference="SBELL-2002100912333601PDT"]' passing object_value) /

b. 「XQuery05b」ファイルを開きます。コードがEnter SQL Statementボックスに表示されます。 次に、「Autotrace」アイコンをクリックします。
XQuery05bのコード: --same query on binary storage table SELECT XMLQuery('/PurchaseOrder/LineItems/LineItem/Description' passing object_value returning content).getStringVal() FROM PO_SL_BIX_TABLE WHERE XMLExists('/PurchaseOrder[Reference="SBELL-2002100912333601PDT"]' passing object_value) /

|
| 5. |
特定の発注書のPicnicを含む説明とともにLineItem 20の参照値を一覧で表示する問合せの実行計画を参照します。 「XQuery06b」ファイルを開きます。 コードがEnter SQL Statementボックスに表示されます。 次に、「Autotrace」アイコンをクリックします。
XQuery06bのコード: --same query on binary storage table SELECT XMLQuery('/PurchaseOrder/Reference' passing object_value returning content).getStringVal() FROM PO_SL_BIX_TABLE WHERE XMLExists('/PurchaseOrder/LineItems/LineItem[@ItemNumber=20]/Description/text()[ora:contains(.,"Picnic") > 0]' passing object_value) /

|
上記のトピックでは、オブジェクト・リレーショナル・記憶域のBツリー索引とバイナリXML表のXMLIndex索引を作成する方法を学習しました。 また、EXPLAIN PLANを参照して、SQL/XML XQuery式のパフォーマンスを確認する方法も学習しました。
トピック・リストに戻る
XQueryのビューを使用してSQLデータからXMLを生成できます。 以下の手順を実行します。
| 1. |
最初に、XMLTable() SQL/XML関数とXQuery式を使用して、リレーショナル表にXMLビューを作成します。 以下のスクリプトを実行します。
createXQueryView
create or replace synonym departments for hr.departments / create or replace synonym locations for hr.locations / create or replace synonym countries for hr.countries / create or replace synonym employees for hr.employees / create or replace synonym jobs for hr.jobs / create or replace view DEPARTMENT_XQL of xmltype with object id (extract(object_value, '/Department/@DepartmentId').getnumberVal()) as select column_value from XMLTable ('for $d in ora:view("DEPARTMENTS"), $l in ora:view("LOCATIONS"), $c in ora:view("COUNTRIES") where $d/ROW/LOCATION_ID = $l/ROW/LOCATION_ID and $l/ROW/COUNTRY_ID = $c/ROW/COUNTRY_ID return <Department DepartmentId= "{$d/ROW/DEPARTMENT_ID/text()}" > <Name>{$d/ROW/DEPARTMENT_NAME/text()}</Name> <Location> <Address>{$l/ROW/STREET_ADDRESS/text()}</Address> <City>{$l/ROW/CITY/text()}</City> <State>{$l/ROW/STATE_PROVINCE/text()}</State> <Zip>{$l/ROW/POSTAL_CODE/text()}</Zip> <Country>{$c/ROW/COUNTRY_NAME/text()}</Country> </Location> <EmployeeList> { for $e in ora:view("EMPLOYEES"), $m in ora:view("EMPLOYEES"), $j in ora:view("JOBS") where $e/ROW/DEPARTMENT_ID = $d/ROW/DEPARTMENT_ID and $j/ROW/JOB_ID = $e/ROW/JOB_ID and $m/ROW/EMPLOYEE_ID = $e/ROW/MANAGER_ID return <Employee employeeNumber="{$e/ROW/EMPLOYEE_ID/text()}" > <FirstName>{$e/ROW/FIRST_NAME/text()}</FirstName> <LastName>{$e/ROW/LAST_NAME/text()}</LastName> <EmailAddress>{$e/ROW/EMAIL/text()}</EmailAddress> <Telephone>{$e/ROW/PHONE_NUMBER/text()}</Telephone> <StartDate>{$e/ROW/HIRE_DATE/text()}</StartDate> <JobTitle>{$j/ROW/JOB_TITLE/text()}</JobTitle> <Salary>{$e/ROW/SALARY/text()}</Salary> <Manager>{$m/ROW/LAST_NAME/text(), ", ", $m/ROW/FIRST_NAME/text()}</Manager> </Employee> } </EmployeeList> </Department>') /



|
| 2. |
作成したXMLビューにXQueryを表示できます。
a. xqueryXQLViewスクリプトを実行します。
select t.column_value from department_xql x, xmltable('for $i in . where $i/Department/EmployeeList/Employee/LastName="Grant" return $i/Department/Name' passing value(x)) t /

b. 問合せの実行計画を参照します。「Autotrace」アイコンをクリックします。

|
トピック・リストに戻る
XMLTable()関数を使用して、バイナリXML表のリレーショナル・ビューの作成および効率的な問合せを実行できます。 以下の手順を実行します。
| 1. |
最初に、XMLTable() SQL/XML関数を使用して、バイナリXML表にリレーショナル・ビューを作成します。 createXMLTableViewスクリプトを実行します。
create or replace view PO_MASTER_DETAIL_VIEW as select m.REFERENCE,m.REQUESTOR,m.USERID,m.COSTCENTER,item.* from PO_SL_BIX_TABLE, xmltable ('/PurchaseOrder' passing object_value COLUMNS REFERENCE varchar2(30) path 'Reference', REQUESTOR varchar2(128) path 'Requestor', USERID varchar(10) path 'User', COSTCENTER varchar2(4) path 'CostCenter', ITEMS xmltype path 'LineItems' ) m, xmltable ('/LineItems/LineItem' passing m.items COLUMNS ITEMNO number(38) path '@ItemNumber', DESCRIPTION varchar2(1024) path 'Description', PARTNO varchar2(56) path 'Part/@Id', QUANTITY number(38) path 'Part/@Quantity', UNITPRICE number(12,2) path 'Part/@UnitPrice' ) item /

|
| 2. |
リレーショナル・ビューでSQL問合せを使用できます。 queryXMLTableViewスクリプトを実行します。
select REFERENCE, ITEMNO, PARTNO, DESCRIPTION from PO_MASTER_DETAIL_VIEW where USERID = 'SBELL' and PARTNO in ( '37429121726', '37429122129', '715515009058' ) /

|
上記のトピックでは、バイナリXML表にリレーショナル・ビューを作成する方法を学習しました。 リレーショナル・ビューの問合せを使用する方法も学習しました。
トピック・リストに戻る
このチュートリアルで学習した内容は、次のとおりです。
 |
Oracle Enterprise ManagerでのXMLスキーマの確認 |
 |
バイナリXML表の作成とデータの格納 |
 |
索引の追加によるXQuery式のパフォーマンスの向上 |
 |
XQueryでのXMLTypeビューの作成 |
 |
バイナリXML表でのリレーショナル・ビューの使用 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|