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

讓Oracle和SqlServer結婚(二)

編輯:關於SqlServer
虛擬化封裝
       通過前面的展示,我們清楚的看到在hgsql中,Oracle和sqlserver可以很好的工作在一起,這僅僅是解決了訪問問題,虛擬集成的最終目的是以一種虛擬化的方式對外提供,最終用戶不需要關心所訪問的數據物理存儲。Hgsql通過視圖、同義詞、存儲過程和目錄多種進行虛擬化的封裝。
視圖
       我們前面提到的原生查詢例子,我們可以保存為視圖,sql如下:
create or replace vIEw v_ora_sql_emp as
select empno ora_empno,
(#sqlserver select ename from emp where empno=&empno&) sql_ename
from (#Oracle select * from emp where rownum < 5)
select * from v_ora_sql_emp
    此時我們就可以直接查詢v_ora_sql_emp視圖獲取數據,而不用關心數據來源。

    Hgsql的視圖創建語法內容可以是一個程序塊,這樣就可以處理更為復雜的邏輯。這裡暫不討論。
同義詞
       同義詞是對象的別名,我們前面在使用sqlserver的substring函數時,調用方式為substring@sqlserver,下面我們來創建一個同義詞:


create synonym PUBLIC.substring for substring@sqlserver
同義詞創建完成後,我們就可以直接調用同義詞了,sql引擎會自動做轉換:

存儲過程
       存儲過程是sql腳本程序塊。我們也可以使用存儲過程來實現上面同義詞的功能,創建sql腳本如下:
create procedure substring(p_str,p_start,p_count) as
 substring@sqlserver(p_str,p_start,p_count);
    下面我們來使用我們的存儲過程
select substring(''hgsql'',2,2) proc
    使用存儲過程,可以實現更為復雜的邏輯控制,下面我們對p_start的參數做一個校驗,sql腳本如下:
create or replace procedure substring(p_str,p_start,p_count) as
begin
 if p_start is null then
     raise ''p_start is null'';
 end if;
 substring@sqlserver(p_str,p_start,p_count);
end
當我們調用substring函數對參數p_start傳入空值時,會拋出如下錯誤提示:

mal; FONT-SIZE: 12pt; LINE-HEIGHT: 173%">目錄
連接到各種數據庫,我們能夠很容易的將表引入,進行調用,但我們在調用時必須知道模式,其實也就是要知道所屬數據庫,雖然我們可以使用同義詞進行虛擬化,但靈活性還是非常有限。目錄就是解決深度虛擬化的好工具。
我們創建一個mytable目錄,如下:

create directory //mytable
        創建完成目錄,我們就可以添加目錄項了,sql如下:
alter directory //mytable add item ora_emp for Oracle.emp;
alter directory //mytable add item ora_sql_emp for v_ora_sql_emp;
alter directory //mytable add item ora_tab for user_tables@Oracle;
alter directory //mytable add item sql_emp for sqlserver.emp;

        下面我們直接通過目錄進行對象訪問:
select * from //mytable/ora_sql_emp


dn_net/sqlhub/683dcc492549467fa7cabd8999446513.png" />
    我們還可以創建一個特殊目錄,格式為:@模式名,該目錄會將遠程的sqlhub中的目錄和其它數據庫中的模式映射為一個子目錄使用,下面我們來創建指向Oracle的目錄,如下圖:

創建完成後,我們展開目錄,發現Oracle的所有模式都自動展開,如下圖:

        我們可以直接查詢目錄下的資源,如下:
select * from //mytable/@Oracle/system/help

    使用目錄,我們可以對集成的數據進行靈活的組織,以資源的方式對外提供。
總結
上面展示的僅僅是針對Oracle和sqlserver,其它數據庫也同樣適用。Sqlhub解決的不僅僅是異構數據庫之間的互訪問題,它對任意數據源提供的基於sql的互相操作能力,例如:XML、Html、Excel、txt等。上面討論到的視圖、存儲過程等使用也只是一個應用點。
上面sql的運行環境為SQLHUB4.1版。

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