Oracle の XMLDBを試してみる。

SQL> create table step1 of xmltype
  2  xmltype store as clob;

表が作成されました。

SQL> l
  1  insert into step1
  2  values(xmltype('<?xmlversion="1.0" encoding="EUC-JP"?>
  3  <order no="000123">
  4    <customer>dukkiedukkie</customer>
  5    <orderdate>2008-04-29</orderdate>
  6* </order>'))
SQL> /

1行が作成されました。

SQL> set long 2000000
SQL> select * from step1;

SYS_NC_ROWINFO$
--------------------------------------------------------------------------------
<?xmlversion="1.0" encoding="EUC-JP"?>
<order no="000123">
  <customer>dukkiedukkie</customer>
  <orderdate>2008-04-29</orderdate>
</order>

基本clobのカラムに全部突っ込んでいる、ということか。

しかし、ノードの選択は一味違う。

SQL> select extract(object_value, '/order/customer') from step1;

EXTRACT(OBJECT_VALUE,'/ORDER/CUSTOMER')
--------------------------------------------------------------------------------
<customer>dukkiedukkie</customer>

SELECTの場合は、XPathみたいに、

extract(object_value, '/order/customer')

としてのノードアクセスが可能。ノードに対してもポインタを貼ってるのかな?
メモリには乗るのかな?どうなってんだろう。


ついでにMySQLでも試す。

Blobで突っ込む

mysql> create database xmltest;
Query OK, 1 row affected (0.01 sec)

mysql> use xmltest;
Database changed
mysql> create table xmldocs (
    -> id int not null auto_increment primary key,
    -> doc_content blob not null,
    -> comment varchar(100) not null default ''
    -> );
Query OK, 0 rows affected (0.05 sec)
mysql> insert into xmldocs values
    -> (null, load_file('/tmp/hoge.xml'), 'test1 ');
Query OK, 1 row affected (0.06 sec)

mysql> select * from xmldocs\G
*************************** 1. row ***************************
         id: 1
doc_content: <?xml version="1.0"?>
<underwear>
        <brassiere>
                <name>Wacol 1/2 Brassiere</name>
                <size>
                        <under>75</under>
                        <top>88</top>
                        <cup>C</cup>
                </size>
                <owner>sakichi</owner>
        </brassiere>
</underwear>

    comment: test1
1 row in set (0.00 sec)

mysql>

5.1からじゃないとExtractValueが効かないみたいだ。。。