欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
從Oracle到Sql Server--Sql語(yǔ)句的智能翻譯

對于這個(gè)問(wèn)題,開(kāi)始的設想比較簡(jiǎn)單,大致過(guò)程是:把Sql語(yǔ)句中不相同的關(guān)鍵字和函數名替換掉,如Oracle中的To_Date換成SqlServer的Convert,就可以在SqlServer上執行了.對一些簡(jiǎn)單的Sql語(yǔ)句這樣確實(shí)可以,可是對復雜的應用來(lái)說(shuō),Sql語(yǔ)句可能多層嵌套,函數也有多層嵌套,如果只是簡(jiǎn)單的替換,代碼中必然會(huì )有無(wú)數的if else,并且出錯后的修改和調試幾乎是不可能的。

通過(guò)對Oracle和SqlServer兩種數據庫的Sql語(yǔ)法的研究比較,認為必須采用語(yǔ)法分析,把Sql語(yǔ)句解析為一棵語(yǔ)法樹(shù),然后再按照語(yǔ)法的轉換規則把sql語(yǔ)句轉換到SqlServer上可執行的語(yǔ)句。要實(shí)現這樣的功能,需要用到的模式有:

1.       INTERPRETER(解釋器)—類(lèi)行為型模式:給定一個(gè)語(yǔ)言,定義它的文法的一種表示,并定義一個(gè)解釋器,這個(gè)解釋器使用該表示來(lái)解釋語(yǔ)言中的句子。通過(guò)實(shí)現解釋器模式,把要執行的Sql語(yǔ)句解釋為Sql的語(yǔ)法樹(shù)。例如一個(gè)Select語(yǔ)句的結構如下


從這張結構圖中可以看到,Sql語(yǔ)句可能出現非常復雜的組合結構,如果不使用語(yǔ)法樹(shù)表示,很難實(shí)現不同數據庫平臺的轉換。

2.       COMPOSITE(組合)—對象結構型模式:將對象組合成樹(shù)形結構以表示“部分-整體”的層次結構。C o m p o s i t e使得用戶(hù)對單個(gè)對象和組合對象的使用具有一致性。

從上面的Sql語(yǔ)句的語(yǔ)法結構可以看到一個(gè)查詢(xún)語(yǔ)句可能是很簡(jiǎn)單的select * from ATable,也可能在sql里面又包含其他的Sql語(yǔ)句。按照組合優(yōu)先于繼承的規則,并沒(méi)有給單獨的Sql和復合的Sql語(yǔ)句創(chuàng )建不同的類(lèi),而是在內部組合并遞歸引用自己的定義,對訪(fǎng)問(wèn)語(yǔ)法樹(shù)的客戶(hù)代碼來(lái)說(shuō),并不需要了解所訪(fǎng)問(wèn)的Sql語(yǔ)句是否存在復合結構。

 

3.       VISITOR(訪(fǎng)問(wèn)者)—對象行為型模式:表示一個(gè)作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類(lèi)的前提下定義作用于這些元素的新操作。

       前面已經(jīng)通過(guò)解釋器模式解析Sql語(yǔ)法,用組合模式來(lái)存儲解析的語(yǔ)法樹(shù),但是我們所需要的不僅如此。還要按照SqlServer的語(yǔ)法結構把語(yǔ)法樹(shù)上的各個(gè)節點(diǎn)重新組合,最終輸出SqlServer上可以執行的Sql語(yǔ)句。例如:Oracle中的一句連接查詢(xún)select a.*,b.* from a,b where a.id=b.id(+),在SqlServer中對應的語(yǔ)句應該是select  a.*,b.* from a left join b on a.id=b.id。從這個(gè)簡(jiǎn)單的例子中可以看到對于表的左連接或右連接,兩種數據庫的語(yǔ)法結構存在較大的差異。如果是在TSql類(lèi)中寫(xiě)某個(gè)方法,由這個(gè)方法遍歷語(yǔ)法樹(shù)上的每個(gè)節點(diǎn),并按照SqlServer的語(yǔ)法結構組合所需要的結果,是可以達到這個(gè)目的的??墒侨绻枰獜倪@棵語(yǔ)法樹(shù)導出其它數據庫上如sybase可執行的sql語(yǔ)句呢,那又要在TSql類(lèi)中再增加新的遍歷算法,所有的相關(guān)代碼又要重新編譯。通過(guò)采用訪(fǎng)問(wèn)者模式,把遍歷節點(diǎn)時(shí)組合語(yǔ)法樹(shù)節點(diǎn)的算法封裝再訪(fǎng)問(wèn)者的方法中,如SqlServer的語(yǔ)法就是一個(gè)TSqlServerVisitor類(lèi),語(yǔ)法樹(shù)遍歷每個(gè)節點(diǎn)時(shí),都會(huì )調用它的Visit方法,全部訪(fǎng)問(wèn)完后即可通過(guò)GetSql得到所需要的Sql語(yǔ)句。這時(shí)如果我們需要轉換到Sybase,只需要再實(shí)現一個(gè)TSybaseVisitor類(lèi),并傳給語(yǔ)法樹(shù),就可以得到sybase的sql語(yǔ)句了

4.有限狀態(tài)機--單詞和關(guān)鍵字的識別.在解析一句sql語(yǔ)句前,先要把其中的字符、數字、關(guān)鍵字和函數等語(yǔ)法元素識別出來(lái)。這顯然不能簡(jiǎn)單的用字符定位等來(lái)判斷,而必須用狀態(tài)機來(lái)識別不同的規則表達式。這方面現在c#里的規則表達式就很好用了。不過(guò)經(jīng)過(guò)重寫(xiě)這些模式識別,也把以前學(xué)的編譯原理好好復習了一遍,對有些概念的理解更深入一些,只怪當初學(xué)的還不夠精啊。呵呵。

 SQL翻譯程序下載:
http://www.cnblogs.com/Files/iseast/TransSql.rar

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
數據庫理論
oracle數據庫中查詢(xún)連接數的實(shí)用sql語(yǔ)句
淘寶數據庫OceanBase SQL編譯器部分 源碼閱讀--解析SQL語(yǔ)法樹(shù)
【連載】如何掌握openGauss數據庫核心技術(shù)?秘訣一:拿捏SQL引擎(1)
談數據庫的性能優(yōu)化 - Database - Tech - JavaEye論壇
05 索引
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久