|
0) { obj.className = "imgborder_on"; } } } function hideImage(obj) { if (obj.className.substr(0, 10) == "imgborder_") { obj.src = eyeglass.src; obj.className = "imgborder_off"; } } function showAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { showImage(imgs[i]); } } function hideAllImages() { imgs = document.images; for (i=0; i < imgs.length; i++) { hideImage(imgs[i]); } } //-->
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
トピック・リストに戻る
Oracle Enterprise ManagerでのXMLスキーマの確認
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表の作成
ここでは、バイナリ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式のパフォーマンスの向上
索引を作成して、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での
XMLTypeビューの使用
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」アイコンをクリックします。
|
トピック・リストに戻る
バイナリXML表でのリレーショナル・ビューの使用
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問合せを使用できます。
queryXMLTable
Viewスクリプトを実行します。
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表でのリレーショナル・ビューの使用 |
トピック・リストに戻る
このアイコンの上にカーソルを置くと、すべてのスクリーンショットが非表示になります。
|