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が効かないみたいだ。。。