程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 讓Oracle和SqlServer結婚(一)

讓Oracle和SqlServer結婚(一)

編輯:關於SqlServer
集成訪問
     建立數據庫連接

首先建立與Oracle的連接
打開sqlhub的管理器,可視化的創建與Oracle的連接,如下圖:

Sqlhub的所有操作都支持sql腳本控制,您也可以在sql命令執行器中執行如下sql命令,連接到Oracle:
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
由於我們設置了參數dbschema ''SCOTT'' loadtype AUTO,SCOTT模式下的所有表就自動加載進來了,如下圖:

    此時,我們已經可以在sqlhub中對Oracle的表執行查詢了:
select * from Oracle.emp


下面建立與SqlServer的連接

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
復制表
現在同時連接到了oracle和sqlserver,我們將Oracle的表emp表復制到SqlServer中,操作如下圖:

當然也可以直接執行如下sql:
create table sqlserver.emp as select * from Oracle.emp
我們可以查詢sqlserver下的emp表:


select * from sqlserver.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字段和sqlserver中的job、mgr和hiredate字段。
遠程查詢表
前面我們連接到oracle時設置了loadtype auto,自動加載表,對沒有自動加載的對象我們可以使用遠程對象調用語法,語法格式為:對象名@模式名。熟悉oracle的朋友應該對這種語法不陌生,它與oracle的遠程鏈路(database link)語法類似,不同之處在於Oracle僅為本身支持,而sqlhub為所有的異構數據庫間提供了支持。
下面我們對sqlserver的sysobjects表做查詢,如下:

select * from dbo.sysobjects@sqlserver
遠程調用函數、存儲過程
   
同樣的語法我們也可以使用Oracle或sqlserver中的函數或存儲過程,如下:
select substring@sqlserver(''hgsql'',2,2) sql,
substr@Oracle(''hgsql'',2,2) ora,
substr(''hgsql'',2,2) hg,
eval_java(''"hgsql".substring(1,3)'') Java

這條sql查詢中集中展示了截字符串函數在sqlserver、Oracle、hgsql和Java執行結果。
這些函數也可以嵌套使用,如下:
select concat(''result:'',
substring@sqlserver(
trim@Oracle('' hgsql ''),2,2)) str

在這條sql查詢中,首先使用了Oracle的trim函數,

然後使用了sqlserver的substring函數,最後使用的hgsql的concat函數,它們可以很好的工作在一起。
原生SQL
前面所使用到的sql都在hgsql引擎中執行,經常我們為了性能等因素需要在Oracle或sqlServer中直接執行sql,hgsql也提供了這種原生sql的語法支持。它的語法是:#模式名 sql,例如:
select * from (#sqlserver select top 5 * from emp)
union all
select * from (#Oracle select * from emp where rownum < 5)
在這條sql中,我們使用sqlserver專有的top語法查詢emp表的前5條數據,使用oracle的rownum偽列查詢Oracle的emp表的前5條記錄,然後在hgsql中將結果合並。
原生sql的執行也支持參數傳遞,例如:
select empno ora_empno,
(#sqlserver select ename from emp where empno=&empno&) sql_ename
from (#Oracle select * from emp where rownum < 5)
這條sql中,我們從Oracle中查詢到了emp表記錄,然後將empno字段值作為參數傳遞到了sqlserver的原生sql中,作為條件找到了對於的ename。
元數據查詢
Hgsql還提供了元數據查詢函數,使用該函數我們能查詢所有建立連接的數據庫的元數據,它由jdbc驅動支持,與數據庫無關。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved