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