葉紅良
摘要:本文主要講述了存儲(chǔ)過程轉(zhuǎn)換的具體意義,并詳細(xì)的說明了不同數(shù)據(jù)庫(kù)之間的存儲(chǔ)過程的差異,還提出了一種從SQLeSvrerZ000到oracle11G存儲(chǔ)過程轉(zhuǎn)換的方法,并且闡述了存儲(chǔ)過程的差異和轉(zhuǎn)換以及其具體的設(shè)計(jì)思路,文中所寫轉(zhuǎn)換技術(shù)對(duì)異種數(shù)據(jù)庫(kù)存儲(chǔ)過程轉(zhuǎn)換具有普遍的指導(dǎo)意義。
關(guān)鍵詞:SQLeSvrerZ000;oracle11G;存儲(chǔ)過程;轉(zhuǎn)換技術(shù)
中圖分類號(hào):TP311.13 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)01-0048-01
1 存儲(chǔ)過程的差異和轉(zhuǎn)換
在SQL標(biāo)準(zhǔn)產(chǎn)生之前,數(shù)據(jù)庫(kù)所使用的是大量的SQL專用語(yǔ)言,這些專用語(yǔ)言在一定程度上植入了個(gè)性化的特征,與此同時(shí)廣受用戶群體的青睞。伴隨著SQL標(biāo)準(zhǔn)的相繼完善,廠商們所用的專用語(yǔ)言也不斷向前發(fā)展,在此過程中大量的專用語(yǔ)言被引入程序設(shè)計(jì)概念,從而實(shí)現(xiàn)強(qiáng)大的業(yè)務(wù)邏輯功能。功能中包含了異常處理機(jī)制、流控制語(yǔ)法以及眾多的擴(kuò)展功能。大多數(shù)專用語(yǔ)言從根本上彼此之間的規(guī)范存有顯著的差異,就連在實(shí)現(xiàn)功能的技術(shù)上也是分門別類,但大量的專用語(yǔ)言中都含有條件處理、循環(huán)控制、變量聲明賦值和異常處理等一系列程序設(shè)計(jì)語(yǔ)言機(jī)制。
SQL語(yǔ)言是SQLServer源程序當(dāng)中的專用語(yǔ)言,當(dāng)中的大部分特性并不能夠獲得Oarcle數(shù)據(jù)庫(kù)專用語(yǔ)言的支持,盡管兩者間所要實(shí)現(xiàn)的功能是相同的,可是兩者之間所用的語(yǔ)言機(jī)制且截然不同。更為復(fù)雜的情況是兩者間的語(yǔ)言特性無法對(duì)等實(shí)現(xiàn),為了能夠?qū)崿F(xiàn)擁有這一特性的SQLServer存儲(chǔ)過程的轉(zhuǎn)換,需要使用PL/SQL相關(guān)語(yǔ)句進(jìn)行模擬,這一過程中極易造成語(yǔ)義丟失或在結(jié)果中出現(xiàn)歧義。
下面以SQLeSrver2000的數(shù)據(jù)定義語(yǔ)句為例進(jìn)行轉(zhuǎn)換過程分析,其他語(yǔ)句的轉(zhuǎn)換過程與此類似。
首先給出SQLServer20OO中CREATE PROCEDURE語(yǔ)句簡(jiǎn)化的上下文無關(guān)文法:
CREATE PROC[EDURE]
[{@rameter
][,…,n]
AS
l(INSERT STATEMENT) …
根據(jù)SQLServer2000的CREATEPROCEDURE語(yǔ)句上下文無關(guān)文法可構(gòu)造實(shí)例如下,它是轉(zhuǎn)換程序要進(jìn)行分析處理的源程序:
CREATE PROCEDURE au_nfo
@lastnamevacrhar(40),
@firstnamevarehar(20)
AS
SELECT * FROM authors
WHERE au_fname=@firstname AND au_Iname=@lastname
2 設(shè)計(jì)思路及分析
2.1 存儲(chǔ)過程轉(zhuǎn)換設(shè)計(jì)
存儲(chǔ)轉(zhuǎn)換的具體設(shè)計(jì)中轉(zhuǎn)換的前端部分較之程序設(shè)計(jì)語(yǔ)言編譯程序的前端不盡相同,其主要的意義是借助于對(duì)Transact-SQL存儲(chǔ)過程源程序的分析,從當(dāng)中獲得具體的語(yǔ)義,再轉(zhuǎn)而用中間結(jié)構(gòu)的形式來將其表達(dá)出來。后續(xù)部分則是依照中間結(jié)構(gòu)進(jìn)行目標(biāo)程序的編寫,并且目標(biāo)程序的應(yīng)與源程序之間使用同一語(yǔ)義。轉(zhuǎn)換之前為了方便獲取存儲(chǔ)過程的源程序,需在相關(guān)數(shù)據(jù)庫(kù)之中得到源數(shù)據(jù),以實(shí)現(xiàn)存儲(chǔ)過程源程序文本的最終獲取。實(shí)施轉(zhuǎn)換的前期我們要保證依托于源程序的數(shù)據(jù)庫(kù)對(duì)象已經(jīng)完成了自身向目標(biāo)數(shù)據(jù)庫(kù)的遷移。整體的存儲(chǔ)轉(zhuǎn)換是由一系列的功能模塊所構(gòu)成,功能模塊相互間的協(xié)作與聯(lián)系如圖l所示。
2.2 詞法及語(yǔ)法分析
在存儲(chǔ)轉(zhuǎn)換過程中的詞法分析又被稱之為掃描,其所實(shí)現(xiàn)的主要功能全部都可以被語(yǔ)法分析模塊進(jìn)行調(diào)用,同時(shí)也可作為多遍掃描的第l遍獨(dú)立運(yùn)行,詞法分析主要主要的功能是針對(duì)存儲(chǔ)過程源程序進(jìn)行解析。借助于對(duì)源程序中每一個(gè)字符的讀取,遵照相關(guān)規(guī)則表達(dá)式使它們組合成具有特殊意義的單詞,所組合成的單詞被稱為存儲(chǔ)過程源程序的最小有意義語(yǔ)言單位。源程序的最小有意義語(yǔ)言單位可以細(xì)分為標(biāo)志符和關(guān)鍵字、分隔符、常量、注釋等。
源程序的語(yǔ)法分析也可以稱做是解析,其主要是按照Transact-SQL的上下文無關(guān)文法進(jìn)行相關(guān)語(yǔ)句的分析,在進(jìn)行分析的過程中還會(huì)在調(diào)用的基礎(chǔ)上形成中間結(jié)構(gòu)功能代碼,也就是進(jìn)行源程序分析的同時(shí)把所會(huì)用到的相關(guān)信息植入到中間結(jié)構(gòu)中來,與此同時(shí)將所生成的中間結(jié)構(gòu)發(fā)送給解釋模塊進(jìn)行解釋。存儲(chǔ)轉(zhuǎn)換過程自始至終都由語(yǔ)法分析進(jìn)行控制,可將這種轉(zhuǎn)換方法稱為語(yǔ)法制導(dǎo)轉(zhuǎn)換。
3 結(jié)語(yǔ)
通過對(duì)SQLServer2000到Oracle11G存儲(chǔ)過程轉(zhuǎn)換技術(shù)的測(cè)試發(fā)現(xiàn),其可自動(dòng)進(jìn)行轉(zhuǎn)換占到整體部分的百分之九十,相信隨著相關(guān)轉(zhuǎn)換技術(shù)的不斷發(fā)展,在不久的將來勢(shì)必會(huì)實(shí)現(xiàn)兩者之間百分之百的自動(dòng)轉(zhuǎn)換。
參考文獻(xiàn)
[1]徐峰,楊波,柳華霞.用JavaBaen實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)存儲(chǔ)過程的替代[J].濟(jì)南大學(xué)學(xué)報(bào),2004(l):61-62.
[2]張金,段希永,陳卓寧.異種數(shù)據(jù)庫(kù)存儲(chǔ)過程轉(zhuǎn)換技術(shù)研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2004(12):43-44.