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として使っても便利なんですけど)