• 検索結果がありません。

外部XML文書の取り込み

ドキュメント内 XML DBファーストステップ (ページ 69-74)

XML 文書ファイル(test1.xml, test2.xml)の格納先である XMLType 表を作成します。

スキーマ注釈を記述して、XMLType表 PO_TABを作成します。

SQL> DECLARE

2 schema varchar2(2000) := '<?xml version="1.0"?>

3 <xsd:schema xmlns="http://www.oracle.com/PO"

4 targetNamespace="http://www.oracle.com/PO"

5 xmlns:xsd="http://www.w3.org/2001/XMLSchema"

6 xmlns:xdb="http://xmlns.oracle.com/xdb"

7 elementFormDefault="qualified">

8 <xsd:element name="PO" type="PO_T"

9 xdb:defaultTable="PO_TAB"/>

10 <xsd:complexType name="PO_T">

11 <xsd:sequence>

12 <xsd:element name="PODATE" type="xsd:date"/>

13 <xsd:element name="COMPANY" type="xsd:string"/>

14 <xsd:element name="ITEM" type="ITEM_T"

15 maxOccurs="1000"/>

16 </xsd:sequence>

17 <xsd:attribute name="pono" type="xsd:decimal"/>

18 </xsd:complexType>

19 <xsd:complexType name="ITEM_T">

20 <xsd:sequence>

21 <xsd:element name="ITEMNO" type="xsd:decimal"/>

22 <xsd:element name="PART" type="xsd:string"/>

23 <xsd:element name="PRICE" type="xsd:float"/>

24 </xsd:sequence>

25 </xsd:complexType>

26 </xsd:schema>';

27 BEGIN

28 dbms_xmlschema.registerSchema(

29 schemaURL => 'http://www.oracle.com/po.xsd', 30 schemaDoc => XMLType(schema),

31 genTables => true, 32 local => true);

33 END;

34 /

リスト7-3 XMLスキーマ登録とXMLType表の作成

SQL*Loader は制御ファイル test.ctl が必要です。制御ファイルに XML 文書のファイ

ル名リストを直接記述する方法もありますが、この例では別ファイル test.dat に記述しま す。

LOAD DATA

INFILE test.dat INTO TABLE PO_TAB APPEND

XMLTYPE(sys_nc_rowinfo$) FIELDS TERMINATED BY ',' (xmldata filler CHAR(2000),

sys_nc_rowinfo$ lobfile(xmldata) terminated by EOF) リスト7-4 test.ctl

test1.xml test2.xml

リスト7-5 test.dat

SQL*Loaderを使って XML 文書ファイルを登録します。SQL*Loaderでは、データを

登録する方式として、従来型とダイレクト・パスを選択できます。ダイレクト・パスは従 来型よりも高速に処理できますが、XML 文書の妥当性チェックが無効になります。この 例で扱う XML 文書は妥当性チェックに問題が無いことが分かっているので、ダイレク ト・パスを使って登録します。

$ sqlldr ユーザー名/パスワード control=test.ctl log=test_direct.log direct=y

SQL*Loader: Release 10.2.0.2.0 - Production on 火 7月 4 15:25:47 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.

ロードは完了しました。 - 論理レコード件数2

リスト7-6 SQL*Loaderの実行

それではログtest_direct.logを確認してみましょう。

SQL*Loader: Release 10.2.0.2.0 - Production on 火 7月 4 15:25:47 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.

制御ファイル: test.ctl データファイルtest.dat 不良ファイル: test.bad 廃棄ファイル: 指定なし

(すべて廃棄できます)

ロード数: ALL スキップ数: 0 許容エラー数: 50 継続文字: 指定なし 使用パス: ダイレクト

表PO_TAB、 ロード済 すべての論理レコードから

この表に対する有効な挿入オプション: APPEND

Column Name Position Len Term Encl Datatype --- --- --- ---- ---- XMLDATA FIRST 2000 , CHARACTER (FILLERフィールド)

SYS_NC_ROWINFO$ DERIVED * EOF CHARACTER 動的LOBFILE - ファイル名XMLDATA

参照整合性制約/トリガー情報:

NULL、一意、主キー制約は無視されました。

トリガーSCOTT."PO_TAB$xd"はロード前に使用禁止になりました。

表PO_TABの次の索引が処理されました:

索引SCOTT.SYS_C0017261に2キーが正常にロードされました。

SCOTT."PO_TAB$xd"は再度有効になりました。

表PO_TAB:

2行のロードに成功しました。

0行はデータ・エラーのためロードされませんでした。

0行はWHEN句のエラーのためロードされませんでした。

0行はすべてのフィールドがNULLのためロードされませんでした。

バインド配列サイズはダイレクト・パスで使用されません。

列配列の行数: 5000

ストリーム・バッファのバイト数: 256000 読取りバッファのバイト数: 1048576

スキップされた論理レコードの合計: 0 読み込まれた論理レコードの合計: 2 拒否された論理レコードの合計: 0 廃棄された論理レコードの合計: 0

SQL*Loaderのメイン・スレッドによってロードされたストリーム・バッファの合計:

1

SQL*Loaderのロード・スレッドによってロードされたストリーム・バッファの合計:

0

実行開始火 7月 04 15:25:47 2006 実行終了火 7月 04 15:25:52 2006

実行時間: 00: 00: 05.12 CPU時間 : 00: 00: 02.04

リスト7-7 SQL*Loaderのログ

登録されたXML文書の数を確認します。

SQL> SELECT count(*) FROM po_tab;

COUNT(*) --- 2

リスト7-8 XML文書数の確認

XML文書ファイルをXMLType表PO_TABに登録できました。

ドキュメント内 XML DBファーストステップ (ページ 69-74)

関連したドキュメント