SQLHub 提供 JDBC 層面的異構資料庫整合,支援 Oracle、SQL Server、MySQL 等任意資料源,並透過 HSQL 引擎實現跨庫 JOIN、遠端函數呼叫、原生 SQL 下推、元資料查詢。
CREATE SCHEMA Oracle TYPE JDBC
DRIVER 'oracle.jdbc.driver.OracleDriver'
URL 'jdbc:oracle:thin:@localhost:1521:ora'
USER 'SCOTT' PASSWORD 'TIGER' DBSCHEMA 'SCOTT' LOADTYPE AUTO
設定 LOADTYPE AUTO 後,SCOTT 結構下所有表自動載入。
CREATE SCHEMA SQLSERVER TYPE JDBC
DRIVER 'com.microsoft.jdbc.sqlserver.SQLServerDriver'
URL 'jdbc:microsoft:sqlserver://localhost:1433;databaseName=test'
USER 'sa' PASSWORD 'sa' DBSCHEMA 'dbo' LOADTYPE AUTO

CREATE TABLE sqlserver.emp AS SELECT * FROM Oracle.emp

SELECT a.EMPNO, a.ENAME, b.JOB, b.MGR, b.HIREDATE
FROM Oracle.EMP a
JOIN SQLSERVER.EMP b ON a.EMPNO = b.EMPNO
查詢結果融合 Oracle 的 EMPNO/ENAME 與 SQL Server 的 JOB/MGR/HIREDATE。

語法:物件名@模式名,類似 Oracle DB Link 但支援所有異構庫。
SELECT * FROM dbo.sysobjects@sqlserver

SELECT
SUBSTRING@sqlserver('hgsql', 2, 2) AS sql,
SUBSTR@Oracle('hgsql', 2, 2) AS ora,
SUBSTR('hgsql', 2, 2) AS hg,
EVAL_JAVA('"hgsql".substring(1,3)') AS Java
單一查詢中混合呼叫四種環境的子字串函數。
支援巢狀呼叫:
SELECT CONCAT('result: ',
SUBSTRING@sqlserver(
TRIM@Oracle(' hgsql '), 2, 2)) AS str
先 Oracle TRIM → SQL Server SUBSTRING → HSQL CONCAT。
繞過 HSQL 引擎,直接在目標資料庫執行原生語法:
SELECT * FROM (#sqlserver SELECT TOP 5 * FROM emp)
UNION ALL
SELECT * FROM (#Oracle SELECT * FROM emp WHERE ROWNUM < 5)
支援參數傳遞:
SELECT empno AS ora_empno,
(#sqlserver SELECT ename FROM emp WHERE empno=&empno&) AS sql_ename
FROM (#Oracle SELECT * FROM emp WHERE ROWNUM < 5)
透過 JDBC DatabaseMetaData 統一查詢所有連線庫的結構資訊。
下篇將介紹視圖、同義詞、預存程序、目錄等虛擬化封裝機制,實現統一資料服務層。