H2Databaseを追っかけていたりしたブログ

H2 database のリリースノートを読んだりとか。

linked table, LINK_SCHEMAを試してみた

外部のデータベースのテーブルに対するリンクテーブルを作成できます。下記のSQLで、Oracleのhogedbのstaffテーブルに対して、mystaffというリンクテーブルを作成できます。

java -cp h2-1.2.134.jar;ojdbc14-10.2.0.4.jar org.h2.tools.Shell -url jdbc:h2:mem:
create linked table mystaff('oracle.jdbc.driver.OracleDriver','jdbc:oracle:thin:@oracledb1:1521:hogedb','hoge','pass','staff');

次のように、外部のデータベースのテーブルに対するクエリをリンクテーブルとして取り扱うこともできます。

create linked table mystaff2('oracle.jdbc.driver.OracleDriver','jdbc:oracle:thin:@oracledb1:1521:hogedb','hoge','pass','(select * from staff where staff_id < 100)');

また、LINK_SCHEMAファンクションを使うと、外部のデータベースのスキーマごとリンクさせることができます(少なくともOracleについては、スキーマ名はcase sensitiveで、しばらくはまりました...)

call link_schema('PUBLIC','oracle.jdbc.driver.OracleDriver','jdbc:oracle:thin:@oracledb1:1521:hogedb','hoge','pass','HOGE');

APサーバにsqlplusが入っていない、でもjdbcドライバはあるぞ、というような状況に遭遇したら、意外と便利かもしれません(普通にlinked tableとして使っても便利なんですけど)