4 XMLTYPE記憶域別テクニック
4.5 半構造化記憶域(ハイブリッド記憶域)
18 </xsd:schema>';
19 BEGIN
20 dbms_xmlschema.registerSchema(
21 schemaURL => 'http://www.oracle.com/so4.xsd', 22 schemaDoc => doc,
23 gentypes => true, 24 gentables => false);
25 END;
26 /
リスト4-18 XMLスキーマの登録
SQL> CREATE TABLE step4 OF XMLTYPE
2 XMLSchema "http://www.oracle.com/so4.xsd"
3 ELEMENT "申込";
リスト4-19 XMLスキーマに基づいたXMLType表の作成
リスト 4-20、4-21 のように’/申込/契約日’の次に来る要素の中身が検証されな くなるので、整形式を保っていれば自由な構造で入力することが可能です。この 部分に対しては完全に非構造化記憶域の扱いになるので、検索を高速化させるた めに適切な索引を使用する必要があります。
SQL> INSERT INTO step4
2 VALUES(XmlType('<?xml version="1.0" encoding="EUC-JP"?>
3 <申込 xmlns="http://www.oracle.com/so4.xsd"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://www.oracle.com/so4.xsd
6 http://www.oracle.com/so4.xsd" NO="000123">
7 <契約者>オラクル太郎</契約者>
8 <契約日>2005-12-25</契約日>
9 <サービス CODE="G2456">
10 <サービス名>Grid提案サポート</サービス名>
11 <開始日>2006-01-23</開始日>
12 <終了日>2007-05-23</終了日>
13 </サービス>
14 </申込>'));
リスト4-20 XML文書の挿入1
SQL> INSERT INTO step4
2 VALUES(XMLTYPE('<?xml version="1.0" encoding="EUC-JP"?>
3 <申込 xmlns="http://www.oracle.com/so4.xsd"
4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5 xsi:schemaLocation="http://www.oracle.com/so4.xsd 6 http://www.oracle.com/so4.xsd"
7 NO="000223">
8 <契約者>オラクル太郎</契約者>
9 <契約日>2005-12-25</契約日>
10 <社外セミナー>
11 <コース名>XML DB 技術セミナー</コース名>
12 <担当者リスト>
13 <現場責任>山田 一郎</現場責任>
14 <講師>中田 英俊</講師>
15 </担当者リスト>
16 <場所>東京都千代田区 GG 21階</場所>
17 <メモ>ノートPC必須、
18 オラクルクライアントがインストール済みであること。</メモ>
19 </社外セミナー>
20 </申込>'));
リスト4-21 XML文書の挿入2
半構造化記憶域の使用により、’/申込/契約日’以下の要素が変化しても受け入れ 可能になっていることを確認できます。
下記の XML フラグメント1、2は、XML ツリー構造が全く異なりますが、
XML スキーマで該当する要素の型を SQLType=”CLOB”で設定してあるので、入 力される XML フラグメントが整形式である以上、どんな構造でも登録が許され ます。
<サービス CODE="G2456">
<サービス名>Grid提案サポート</サービス名>
<開始日>2006-01-23</開始日>
<終了日>2007-05-23</終了日>
</サービス>
リスト4-22 XMLフラグメント1
<社外セミナー>
<コース名>XML DB 技術セミナー</コース名>
<担当者リスト>
<現場責任>山田 一郎</現場責任>
<講師>中田 英俊</講師>
</担当者リスト>
<場所>東京都千代田区 GG 21階</場所>
<メモ>ノートPC必須、
オラクルクライアントインストール済みであること。
</メモ>
</社外セミナー>
リスト4-23 XMLフラグメント2
例として、XMLフラグメント2を検索条件にしたXML文書の検索を実行しま
す。
SQL> SELECT extractValue(value(s),'/申込/@NO',
2 'xmlns="http://www.oracle.com/so4.xsd"') Result 3 FROM step4 s
4 WHERE extractValue(value(s),
5 '/申込/社外セミナー/担当者リスト/現場責任',
6 'xmlns="http://www.oracle.com/so4.xsd"')='山田 一郎';
RESULT --- 000223
リスト4-24 内容の検索
半構造化データ要素の属性に対する検索が実行できました。