本申請涉及文檔分析技術領域,尤其涉及一種數(shù)據(jù)庫間的語句轉換方法和裝置。
背景技術:
目前,大部分數(shù)據(jù)庫之間(oracle、db2、sqlserver、sybase、informix、mysql、vf、access等)切換的開發(fā),只有提供數(shù)據(jù)庫之間的數(shù)據(jù)同步系統(tǒng)與方法,還未有將數(shù)據(jù)轉換時存儲過程與視圖一起轉換的相關系統(tǒng)或方法,一般都是開發(fā)人員通過逐一比對每個存儲過程與視圖后進行改寫,增加了改造開發(fā)的工作量,需要投入的人力成本較大。
由于一般編寫的存儲過程與視圖都利用數(shù)據(jù)庫本身內置的函數(shù)進行語句編寫,來滿足各種功能需求,但各個數(shù)據(jù)庫內置的函數(shù)功能與方法都不太一樣,方法名稱與使用方法都不一樣,故對于涉及大量的存儲過程與視圖的復雜數(shù)據(jù)庫在數(shù)據(jù)庫間進行同步轉換時,開發(fā)人員必須花費大量的工作量在每條語句的比對、編寫改造上,這樣的工作量是極大的,導致出錯率較高,開發(fā)效率也較低。
技術實現(xiàn)要素:
為解決現(xiàn)有技術中的上述問題,本申請的一個目的在于提出一種數(shù)據(jù)庫間的語句轉換方法及裝置,可以有效減少開發(fā)人員的工作量,提高工作效率,降低出錯率。
為達到上述目的,本申請實施例提出的數(shù)據(jù)庫間的語句轉換方法,包括:獲取源數(shù)據(jù)庫中的源語句,并進行識別分析;在目標數(shù)據(jù)庫語言中查找與所述源語句對應的映射語句;根據(jù)所述源語句中的參數(shù)確定所述映射語句的參數(shù),得到目標數(shù)據(jù)庫語句。
為達到上述目的,本申請實施例提出的數(shù)據(jù)庫間的語句轉換裝置,包括:獲取單元,用于獲取源數(shù)據(jù)庫中的源語句,并進行識別分析;查找單元,用于在目標數(shù)據(jù)庫語言中查找與所述源語句對應的映射語句;確定單元,用于根據(jù)所述源語句中的參數(shù)確定所述映射語句的參數(shù),得到目標數(shù)據(jù)庫語句。
由以上本申請實施例提供的技術方案可見,通過獲取源數(shù)據(jù)庫的源語句并進行分 析識別,在目標數(shù)據(jù)庫語言中查找與源語句功能相同的目標語句,并使用映射函數(shù)替換源語句中的函數(shù),將源語句中的參數(shù)轉換類型并帶入到轉換后的目標語句和/或映射函數(shù)中,總而實現(xiàn)了數(shù)據(jù)庫間語句的轉換,進而能夠實現(xiàn)任意數(shù)據(jù)庫間存儲過程與視圖的轉換,能夠有效減少開發(fā)人員的工作量,降低人力成本,提高開發(fā)效率,降低出錯率。
本申請附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本申請的實踐了解到。
附圖說明
為了更清楚地說明本申請實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請一實施例提出的數(shù)據(jù)庫間的語句轉換方法的流程示意圖;
圖2是本申請一實施例提出的數(shù)據(jù)庫間的語句轉換裝置的結構示意圖;
圖3是本申請另一實施例的數(shù)據(jù)庫間的語句轉換裝置的結構示意圖;
圖4是本申請一實施例的在數(shù)據(jù)庫間進行語句轉換的流程示意圖。
具體實施方式
本申請實施例提供一種數(shù)據(jù)庫間的語句轉換方法和裝置。
為了使本技術領域的人員更好地理解本申請中的技術方案,下面將結合本申請實施例中的附圖,對本申請實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本申請保護的范圍。
圖1是本申請一實施例提出的數(shù)據(jù)庫間的語句轉換方法的流程示意圖,在該圖所示的實施例中,通過查找源語句在目標數(shù)據(jù)庫語言中對應功能的映射語句,并將源語句中的參數(shù)帶入映射語句中,來實現(xiàn)數(shù)據(jù)庫間的語句轉換,從而降低人力成本。本申請所述的數(shù)據(jù)庫間包括不同類型的數(shù)據(jù)庫之間及同類型數(shù)據(jù)庫不同版本之間。如圖1 所示,該方法包括:
步驟101,獲取源數(shù)據(jù)庫中的源語句,并進行識別分析。其中,源語句中可以包括函數(shù)和參數(shù)等??梢愿鶕?jù)源數(shù)據(jù)庫語言的功能描述對源語句進行識別。
步驟102,在目標數(shù)據(jù)庫語言中查找與所述源語句對應的映射語句。所述映射語句是能夠與源語句實現(xiàn)相同功能的語句。
步驟103,根據(jù)所述源語句中的參數(shù)確定所述映射語句的參數(shù),得到目標數(shù)據(jù)庫語句。
根據(jù)本申請的一個實施例,所述獲取源數(shù)據(jù)庫中的源語句包括:獲取源數(shù)據(jù)庫的連接信息,其中,連接信息包括源數(shù)據(jù)庫地址,源數(shù)據(jù)庫名,以及源數(shù)據(jù)庫的賬號名和密碼;根據(jù)所述連接信息獲取所述源數(shù)據(jù)庫中的源語句。通過輸入源數(shù)據(jù)庫的連接信息獲取源數(shù)據(jù)庫的訪問權限,與源數(shù)據(jù)庫建立連接,從而對源數(shù)據(jù)庫中的語句進行分析、轉換等交互操作。
根據(jù)本申請的一個實施例,所述獲取源數(shù)據(jù)庫中的源語句,并進行識別分析包括:識別所述源語句中的函數(shù)信息和參數(shù)信息,其中,函數(shù)信息包括函數(shù)的名稱和功能,參數(shù)信息包括參數(shù)的類型、內容和功能。通過識別源語句中的函數(shù)和參數(shù),從而根據(jù)函數(shù)和參數(shù)確定源語句所實現(xiàn)的功能。
根據(jù)本申請的一個實施例,所述在目標數(shù)據(jù)庫語言中查找與所述源語句對應的映射語句包括:根據(jù)所述函數(shù)的功能,在所述目標數(shù)據(jù)庫語言中查找與所述函數(shù)對應的映射函數(shù)。其中,映射函數(shù)是目標數(shù)據(jù)庫語言中能夠實現(xiàn)源語句中函數(shù)功能的函數(shù)。通過分析源語句中的函數(shù)所實現(xiàn)的功能,在目標數(shù)據(jù)庫語言中查找能夠實現(xiàn)相同功能的函數(shù)。
根據(jù)本申請的一個實施例,所述根據(jù)所述函數(shù)的功能,在所述目標數(shù)據(jù)庫語言中查找與所述函數(shù)對應的映射函數(shù)進一步包括:對所述函數(shù)的功能進行語義分析;獲取所述目標數(shù)據(jù)庫語言中函數(shù)的功能描述;根據(jù)所述功能描述查找與所述函數(shù)的功能相同的映射函數(shù)。通過對功能進行語義分析,從而在目標數(shù)據(jù)庫語言中查找與之匹配的能夠實現(xiàn)相同功能的映射函數(shù)。
根據(jù)本申請的一個實施例,所述根據(jù)所述源語句中的參數(shù)確定所述映射語句的參數(shù)包括:將所述源語句中的參數(shù)代入所述映射語句中的參數(shù);根據(jù)所述映射語句對所述源語句進行編譯,得到目標語句;將所述目標語句存儲到目標數(shù)據(jù)庫的預設位置。 具體的,源語句中包括函數(shù),參數(shù)可以被包含在函數(shù)中也可以直接被包含在源語句中。這里所說的函數(shù)可以是編程意義上的函數(shù),也可以是編程意義上的指令等。
根據(jù)本申請的一個實施例,在所述根據(jù)所述功能描述查找與所述函數(shù)的功能相同的映射函數(shù)之后,還包括:當所述函數(shù)具有多個功能相同的映射函數(shù)時,選取其中一個映射函數(shù)用于編譯;若編譯不通過,則重新選取其他的所述映射函數(shù)。當目標數(shù)據(jù)庫語言中有多個可以實現(xiàn)與源語句中函數(shù)相同功能的映射函數(shù)時,可以按照預設的規(guī)則(如隨機選取或按順序選第一個等)選取其中一個用于編譯,當結果顯示該函數(shù)編譯不通過時,選取其他的映射函數(shù)重新編譯,直到編譯成功為止。
根據(jù)本申請的一個實施例,所述根據(jù)所述源語句中的參數(shù)確定所述映射語句的參數(shù)包括:對所述源語句中的參數(shù)進行分析,確定所述源語句中的參數(shù)的類型和內容;當所述源語句中的參數(shù)與所述映射語句中對應的參數(shù)的類型不同時,將所述源語句中的參數(shù)調整為所述映射語句中對應參數(shù)的類型。具體地,源語句中的參數(shù)可能與映射函數(shù)或映射語句中對應的參數(shù)的類型存在差異,例如源語句中的參數(shù)為浮點型,而映射語句中的參數(shù)為整型,此時則需要在保持該參數(shù)內容含義不變的情況下改變參數(shù)的類型,從而將源語句中的參數(shù)對應的應用到映射語句中,進而通過將源語句中的函數(shù)轉換為目標數(shù)據(jù)庫語言的映射函數(shù),將源語句中的參數(shù)類型轉換為適用于映射語句中對應參數(shù)的類型,從而實現(xiàn)源語句到目標數(shù)據(jù)庫語句的轉換。
根據(jù)本申請的實施例,可以通過獲取源數(shù)據(jù)庫的源語句并進行分析識別,在目標數(shù)據(jù)庫語言中查找與源語句功能相同的目標語句,并使用映射函數(shù)替換源語句中的函數(shù),將源語句中的參數(shù)轉換類型并帶入到轉換后的目標語句和/或映射函數(shù)中,總而實現(xiàn)了數(shù)據(jù)庫間語句的轉換,進而能夠實現(xiàn)任意數(shù)據(jù)庫間存儲過程與視圖的轉換,能夠有效減少開發(fā)人員的工作量,降低人力成本,提高開發(fā)效率,降低出錯率。
基于同一發(fā)明構思,本申請實施例還提供了一種數(shù)據(jù)庫間的語句轉換裝置,可以用于實現(xiàn)上述實施例所描述的方法,如下面的實施例所述。由于數(shù)據(jù)庫間的語句轉換裝置解決問題的原理與數(shù)據(jù)庫間的語句轉換方法相似,因此數(shù)據(jù)庫間的語句轉換裝置的實施可以參見數(shù)據(jù)庫間的語句轉換裝置的實施,重復之處不再贅述。以下所使用的,術語“單元”或者“模塊”可以實現(xiàn)預定功能的軟件和/或硬件的組合。盡管以下實施例所描述的裝置較佳地以軟件來實現(xiàn),但是硬件,或者軟件和硬件的組合的實現(xiàn)也是可能并被構想的。
圖2是本申請一實施例的數(shù)據(jù)庫間的語句轉換裝置的結構示意圖。本實施例的裝置可以為實現(xiàn)相應功能的邏輯部件構成,也可以為運行有相應功能軟件的電子設備。
如圖2所示,該數(shù)據(jù)庫間的語句轉換裝置包括:獲取單元100、查找單元200和確定單元300。
具體地,獲取單元100用于獲取源數(shù)據(jù)庫中的源語句,并進行識別分析。
查找單元200用于在目標數(shù)據(jù)庫語言中查找與所述源語句對應的映射語句。
確定單元300用于根據(jù)所述源語句中的參數(shù)確定所述映射語句的參數(shù),得到目標數(shù)據(jù)庫語句。
圖3所示是本申請另一實施例的數(shù)據(jù)庫間的語句轉換裝置的結構示意圖。
根據(jù)本申請的一個實施例,如圖3所示,獲取單元100包括:第一獲取模塊110、第二獲取模塊120和識別模塊130,所述查找單元200包括:分析模塊210、第三獲取模塊220和查找模塊230,所述確定單元300包括:代入模塊310、編譯模塊320、存儲模塊330、確定模塊340和調整模塊350,所述裝置在圖2的基礎上還包括選取單元400。
第一獲取模塊110用于獲取源數(shù)據(jù)庫的連接信息,其中,連接信息包括源數(shù)據(jù)庫地址,源數(shù)據(jù)庫名,以及源數(shù)據(jù)庫的賬號名和密碼。
第二獲取模塊120用于根據(jù)所述連接信息獲取所述源數(shù)據(jù)庫中的源語句。
識別模塊130用于識別所述源語句中的函數(shù)信息和參數(shù)信息,其中,函數(shù)信息包括函數(shù)的名稱和功能,參數(shù)信息包括參數(shù)的類型、內容和功能。
根據(jù)本申請的一個實施例,所述查找單元200具體用于根據(jù)所述函數(shù)的功能,在所述目標數(shù)據(jù)庫語言中查找與所述函數(shù)對應的映射函數(shù)。
分析模塊210用于對所述函數(shù)的功能進行語義分析。
第三獲取模塊220用于獲取所述目標數(shù)據(jù)庫語言中函數(shù)的功能描述。
查找模塊230用于根據(jù)所述功能描述查找與所述函數(shù)的功能相同的映射函數(shù)。
代入模塊310用于將所述源語句中的參數(shù)代入所述映射語句中的參數(shù)。
編譯模塊320用于根據(jù)所述映射語句對所述源語句進行編譯,得到目標語句。
存儲模塊330用于將所述目標語句存儲到目標數(shù)據(jù)庫的預設位置。
選取單元400用于在所述函數(shù)具有多個功能相同的映射函數(shù)時,選取其中一個映射函數(shù)用于編譯,以及在編譯不通過時,重新選取其他的所述映射函數(shù)。
確定模塊340用于對所述源語句中的參數(shù)進行分析,確定所述源語句中的參數(shù)的類型和內容。
調整模塊350用于在所述源語句中的參數(shù)與所述映射語句中對應的參數(shù)的類型不同時,將所述源語句中的參數(shù)調整為所述映射語句中對應參數(shù)的類型。
根據(jù)本申請的實施例,可以通過獲取源數(shù)據(jù)庫的源語句并進行分析識別,在目標數(shù)據(jù)庫語言中查找與源語句功能相同的目標語句,并使用映射函數(shù)替換源語句中的函數(shù),將源語句中的參數(shù)轉換類型并帶入到轉換后的目標語句和/或映射函數(shù)中,總而實現(xiàn)了數(shù)據(jù)庫間語句的轉換,進而能夠實現(xiàn)任意數(shù)據(jù)庫間存儲過程與視圖的轉換,能夠有效減少開發(fā)人員的工作量,降低人力成本,提高開發(fā)效率,降低出錯率。
圖4本申請一實施例的在數(shù)據(jù)庫間進行語句轉換的流程示意圖:
步驟401,獲取源數(shù)據(jù)庫的連接信息。
其中,連接信息包括源數(shù)據(jù)庫地址,源數(shù)據(jù)庫名,以及源數(shù)據(jù)庫的賬號名和密碼等。
步驟402,根據(jù)所述連接信息獲取所述源數(shù)據(jù)庫中的源語句。
具體地,通過輸入源數(shù)據(jù)庫的連接信息獲取源數(shù)據(jù)庫的訪問權限,與源數(shù)據(jù)庫建立連接,從而對源數(shù)據(jù)庫中的語句進行分析、轉換等交互操作。
步驟403,識別所述源語句中的函數(shù)信息和參數(shù)信息。
其中,函數(shù)信息包括函數(shù)的名稱和功能,參數(shù)信息包括參數(shù)的類型、內容和功能。源語句中包括函數(shù),參數(shù)可以被包含在函數(shù)中也可以直接被包含在源語句中。這里所說的函數(shù)可以是編程意義上的函數(shù),也可以是編程意義上的指令等。通過識別源語句中的函數(shù)信息和參數(shù)信息,可以確定源語句所實現(xiàn)的功能。
步驟404,根據(jù)所述函數(shù)的功能,在所述目標數(shù)據(jù)庫語言中查找與所述函數(shù)對應的映射函數(shù)。
其中,映射函數(shù)是目標數(shù)據(jù)庫語言中能夠實現(xiàn)源語句中函數(shù)功能的函數(shù)??赏ㄟ^分析源語句中的函數(shù)所實現(xiàn)的功能,在目標數(shù)據(jù)庫語言中查找能夠實現(xiàn)相同功能的函數(shù)。例如可以根據(jù)源語句中函數(shù)的名稱到源數(shù)據(jù)庫語言中查找該函數(shù)的功能描述,對該功能描述進行語義分析,根據(jù)語義分析的關鍵詞結果到目標數(shù)據(jù)庫語言中查找功能描述與該功能相匹配的映射函數(shù)。
在本申請的一個實施例中,當所述函數(shù)具有多個功能相同的映射函數(shù)時,可以按 照預設的規(guī)則(如隨機選取或按順序選第一個等)選取其中一個映射函數(shù)用于編譯;若編譯結果顯示不通過,則重新選取其他的所述映射函數(shù)重新編譯,直到編譯成功為止。
以sqlserver數(shù)據(jù)庫語言轉換為mysql數(shù)據(jù)庫語言為例,如:sqlserver語言中的isnull函數(shù)功能為判斷數(shù)據(jù)是否為空,在mysql語言中對應的實現(xiàn)該功能的是ifnull函數(shù),sqlserver語言中獲取當前時間的函數(shù)是getdate,在mysql語言中對應的是now函數(shù),根據(jù)這些功能的對應關系,可以通過分析替換把源數(shù)據(jù)庫中的各條語句轉換成符合目標數(shù)據(jù)庫語法的語句并編譯。
步驟405,對所述源語句中的參數(shù)進行分析,確定所述源語句中的參數(shù)的類型和內容。
其中,參數(shù)的類型是按照數(shù)據(jù)庫語言中的預設規(guī)則設定的,參數(shù)的內容例如是數(shù)值或者具體的變量參數(shù)等。
步驟406,當所述源語句中的參數(shù)與所述映射語句中對應的參數(shù)的類型不同時,將所述源語句中的參數(shù)調整為所述映射語句中對應參數(shù)的類型。
具體地,源語句中的參數(shù)可能與映射函數(shù)或映射語句中對應的參數(shù)的類型存在差異,例如源語句中的參數(shù)為浮點型,而映射語句中的參數(shù)為整型,此時則需要在保持該參數(shù)內容含義不變的情況下改變參數(shù)的類型。
步驟407,將調整后的參數(shù)代入所述映射語句中相應的參數(shù)。
將源語句中的參數(shù)調整類型后對應的應用到映射語句中,進而通過將源語句中的函數(shù)轉換為目標數(shù)據(jù)庫語言的映射函數(shù),將源語句中的參數(shù)轉換為適用于映射語句的參數(shù),從而實現(xiàn)源語句到目標數(shù)據(jù)庫語句的轉換。
步驟408,對所述映射語句進行編譯,得到目標語句。
在編譯不成功時,可以重新執(zhí)行步驟404,重新選擇適用的映射函數(shù)進行編譯。在多次編譯不通過的情況下,還可以進行人工篩查。
步驟409,將所述目標語句存儲到目標數(shù)據(jù)庫的預設位置。
在本申請的一個實施例中,還可以根據(jù)各個數(shù)據(jù)庫語言的功能描述,根據(jù)各數(shù)據(jù)庫的語法語義規(guī)則、函數(shù)的功能、數(shù)據(jù)類型定義等,對每條語句進行分析,預先建立數(shù)據(jù)庫之間的語句和\或函數(shù)映射表格,在需要進行數(shù)據(jù)庫間的語句轉換時,通過分析語句中的函數(shù)的名稱,在映射表格中查找到與該函數(shù)對應的目標數(shù)據(jù)庫的映射函 數(shù),將轉換后的參數(shù)應用到映射函數(shù)中進行編譯,從而把各條語句轉換成符合目標數(shù)據(jù)庫語法的語句并編譯,進而把原存儲過程與視圖轉換成符合目標數(shù)據(jù)庫的語法、能夠實現(xiàn)同等功能并能成功運行的存儲過程與視圖。
本實施例可以通過獲取源數(shù)據(jù)庫的源語句并進行分析識別,在目標數(shù)據(jù)庫語言中查找與源語句功能相同的目標語句,并使用映射函數(shù)替換源語句中的函數(shù),將源語句中的參數(shù)轉換類型并帶入到轉換后的目標語句和/或映射函數(shù)中,總而實現(xiàn)了數(shù)據(jù)庫間語句的轉換,進而能夠實現(xiàn)任意數(shù)據(jù)庫間存儲過程與視圖的轉換,能夠有效減少開發(fā)人員的工作量,降低人力成本,提高開發(fā)效率,降低出錯率。
需要說明的是,在本申請的描述中,術語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。此外,在本申請的描述中,除非另有說明,“多個”的含義是兩個或兩個以上。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本申請的優(yōu)選實施方式的范圍包括另外的實現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應被本申請的實施例所屬技術領域的技術人員所理解。
應當理解,本申請的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領域公知的下列技術中的任一項或他們的組合來實現(xiàn):具有用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(pga),現(xiàn)場可編程門陣列(fpga)等。
本技術領域的普通技術人員可以理解實現(xiàn)上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質中,該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。
在本說明書的描述中,參考術語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結合該實施例或示例描述的具體特征、結構、材料或者特點包含于本申請的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結構、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結合。
盡管上面已經示出和描述了本申請的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本申請的限制,本領域的普通技術人員在本申請的范圍內可以對上述實施例進行變化、修改、替換和變型。