《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > GKD-BASE PL/SQL引擎實現關鍵技術研究

GKD-BASE PL/SQL引擎實現關鍵技術研究

2008-08-11
作者:唐 揚 熊 偉 陳宏盛 景

??? 摘 要: 在數據庫管理系統" title="管理系統">管理系統GKD-BASE" title="GKD-BASE">GKD-BASE上設計并實現了兼容Oracle PL/SQL V2.3 語言規范的PL/SQL引擎,擴展了GKD-BASE過程處理功能。
??? 關鍵詞: 過程語言? PL/SQL? 符號表? 游標

?

??? GKD-BASE數據庫是一個具有自主知識產權的數據庫管理系統,具有兼容SQL89標準的SQL引擎,能夠為用戶提供一個統一、有效的數據庫訪問接口,實現對數據庫的各種操作。但是SQL語言缺乏對算法的描述能力,難以勝任復雜的程序設計。為了融合SQL語言強大的集合數據處理能力和第三代語言(3GL)靈活的過程處理能力,主流數據庫管理系統產品都已提供了對過程式SQL語言的支持,如Oracle的PL/SQL[1]。為了使GKD-BASE適應發展現狀,滿足管理人員和開發人員的需求,急需開發GKD-BASE自身的PL/SQL引擎。
??? 本文在數據庫管理系統GKD-BASE上設計并實現了兼容Oracle PL/SQL V2.3語言規范的PL/SQL引擎,擴展了GKD-BASE過程處理功能。
1 GKD-BASE PL/SQL引擎的體系結構
??? GKD-BASE PL/SQL引擎的基本功能是將用戶用PL/SQL語言編寫的程序通過詞法分析程序、語法分析" title="語法分析">語法分析程序進行解析,生成中間代碼并解釋執行。如果在分析階段或解釋執行階段發現錯誤,則向用戶報告錯誤號及相應的錯誤信息,以便用戶排錯[2]。根據PL/SQL語言兼有過程式語句和SQL語句的特點,采取分治策略,把過程語句和SQL語句分開處理。PL/SQL引擎在對PL/SQL源程序編譯執行時,首先進行預處理,把SQL語句和過程語句分開;然后對SQL語句和過程語句分別解析,生成語法樹;最后通過執行模塊對中間代碼進行解釋執行。
??? GKD-BASE PL/SQL引擎對源程序編譯生成中間代碼,不能直接在目標機器上執行,需要一個解釋中間代碼的環境,以提供對PL/SQL語言中的數據類型的支持,保證PL/SQL正確執行。因此GKD-BASE PL/SQL引擎可分為編譯器和解釋器兩部分,如圖1。編譯器接收到PL/SQL語句塊后進行預處理,將句子分為SQL語句和過程語句。對于SQL語句,編譯器建立SQL語句節點,進行相應的變量綁定" title="綁定">綁定和語法檢查;檢查無誤后產生中間代碼。對于過程語句,編譯器對語句成分進行語法分析并建立相應的符號表,也生成中間代碼。因此,可以把編譯器劃分為SQL語言解析、過程語言解析、符號表生成與管理、中間代碼表示與管理等模塊。解釋器的作用是對編譯器生成的中間代碼進行解釋執行[3],與編譯器對應,具有獨立的SQL語句解釋模塊和過程語句解釋模塊。解釋器還包括執行狀態堆棧的管理、與GKD-BASE SQL引擎的調用接口。異常處理模塊主要實現程序運行時的錯誤檢查和報告,并支持用戶自定義異常和預定義異常的檢查和處理。

?


2 GKD-BASE PL/SQL編譯器實現中的一些關鍵問題
??? GKD-BASE PL/SQL編譯器主要是對PL/SQL源程序進行詞法分析、語法分析和語義處理[4]。本文借助構建詞法分析器的Lex和編譯程序自動產生工具Yacc[5],實現了對PL/SQL源程序的編譯。下面分別說明符號表的設計與管理、SQL語句解析以及游標解析。
2.1 符號表的設計與管理
??? 符號表是一個包含程序中的變量、自定義類型和函數信息的數據庫。通過索引對應于庫中的一條記錄;每條記錄對應著一個對象的信息,如變量的類型或函數的返回值等[2]。
??? 考慮到PL/SQL語言的塊結構和名字作用域,可以使用名字堆棧存放源程序中所使用的標志符的索引、名字和類型。每個項目只包括名字本身和用來表明它的類型的標志值,以及該名字在符號表中的項目索引。名字堆棧采用層次結構,是鏈表型的堆棧,堆棧的每一層存放了解析的語句塊嵌套層內的所有名字信息,如圖2。在進入或退出一個嵌套層時調用相應的壓棧和彈棧操作;查找符號時,從棧頂向棧底搜索。名字堆棧實現了標志符名稱與相應的符號表索引間的映射,解決了標志符的作用域問題和可見性問題,滿足了對符號表管理和調用的要求。

?


2.2? SQL語句的解析
??? 為了避免SQL語句在執行時出現語法錯誤,需要提前檢查其語法的正確性。SQL語句是面向集合的數據操作語言,只能交由SQL引擎處理。但是PL/SQL語言為了增強SQL語句與過程式語句的交互能力,在SQL語句中引入變量,GKD-BASE的SQL引擎無法識別,必須在提交之前提取出變量,替換為SQL引擎可以識別的格式。如:
??? SELECT empno, name INTO v_empno, v_name FROM emp WHERE birthday = v_date;
??? 這個SELECT語句首先把變量v_date綁定到列名birthday,然后根據條件查出相應的結果(empno , name),并賦值給預先定義的變量(v_empno , v_name)。對于GKD-BASE的SQL引擎來說,只能識別出如下格式的SELECT語句:
??? SELECT empno, name INTO : v_empno, : v_name FROM emp WHERE birthday= :1;
??? 在把SQL語句交由GKD-BASE SQL引擎處理之前,識別出變量v_empno、v_name及v_date進行格式轉換,在into之后的變量前面添加“:”,where后面的變量用帶有冒號的數字序號代替,構造出符合SQL引擎要求的語句;完成這些處理之后,把新的語句作為字符串交由SQL引擎進行語法分析,檢查這條語句的語法是否正確,以及語句中的變量與對應的列是否匹配;最后返回結果,報錯或者生成語法樹。
2.3 游標的解析
??? 游標是指向內存中上下文區的句柄或指針。借助于游標,PL/SQL程序可以控制上下文區和語句處理過程中游標的變化。PL/SQL游標按使用方式可以分為顯式游標和隱式游標。
??? 顯式游標的使用包括聲明游標、打開游標、游標檢索、關閉游標四個步驟。編譯游標聲明語句時,首先調用SQL引擎分析SQL語句成分,轉換為SQL引擎可以識別的格式,把游標的索引信息加入名字堆棧和符號表中。游標打開操作在名字堆棧中搜索游標名字,獲取聲明階段在符號表保存的相關信息并加入到語法樹中。游標檢索語句的編譯首先獲取游標的符號表的信息;然后關聯游標中SQL語句的信息和取值變量鏈表的信息,檢查游標變量與游標引用列是否匹配;最后保存相關信息,加入語法樹。游標的關閉操作釋放資源并把游標狀態初始化,把游標在符號表中的信息保存并加入語法樹。
?? ?隱式游標一般用于對DML語句的處理。每條DML語句對應于一個隱式游標,編譯時可以作為一般的SQL語句來處理,直接調用GKD-BASE的SQL引擎對其進行編譯。這些語句的游標處理是由SQL引擎自動完成的,不需要PL/SQL引擎對干涉。
3 GKD-BASE PL/SQL解釋器實現中的一些關鍵問題
??? 解釋器實現中的關鍵問題" title="關鍵問題">關鍵問題有語句的執行、執行狀態堆棧的設計以及返回值的處理。
??? 對于語句的執行,可分為SQL語句執行和過程語句執行兩部分,根據語法樹上相應節點分別編寫函數來完成解釋任務。這些函數例程之間也是樹狀的層次調用結構,樹根的解釋執行依賴于其子樹上各個節點的解釋函數的成功運行。
??? 在GKD-BASE PL/SQL引擎的解釋執行器中,設計了“執行狀態”的數據結構來記載函數的執行狀態信息。解釋器中所有的解釋函數都擁有一個指針參數指向這個結構,需要在這些函數間傳遞的信息將被拷貝到這個結構。PL/SQL引擎調用子程序的過程中,構造“執行狀態堆棧”。調用之前,保存現場,將執行狀態壓棧;調用結束后恢復現場,彈出當前執行狀態,回到上一層繼續,如圖3。

?


??? 在語句塊執行完畢后,解釋器會根據情況給出三種類型的返回狀態:ok、exit、return。當正常執行完一條過程語句或SQL語句后,返回ok;或者當執行狀態當前層中所有語句都執行正常,向上一層返回ok。當執行時遇到EXIT關鍵字,如果執行狀態中的退出標號與輸入參數中的退出標號一致時,說明是正常退出,返回exit。當執行時遇到RETURN關鍵字,說明語句鏈中所有語句執行完畢,返回return。直到到達執行狀態頂層并給出返回值,結束整個解釋執行過程。
參考文獻
1 Tom Portfolio. PL/SQL User's Guide and Reference, Release?8.1.6. Oracle Corporation. 1999.
2 Scott Urman.陳維軍, 王蕾譯. Oracle9i PL/SQL 程序設計.北京:機械工業出版社, 2002
3 Alfred V.Aho, Ravi Sethi, Jeffery D.Ullman. Compilers:?Principles, Techniques, and Tools, 2001,Addsion-Wesley?Publishing Company
4 陳火旺.程序設計語言——編譯原理,北京:國防工業出版社,2000
5? Levine,J.R. lex與yacc(第二版). 北京:機械工業出版社,2003

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          一区二区三区偷拍| 一区二区三区视频在线| 午夜精品在线视频| 99视频有精品| 亚洲黄色av一区| 欧美三级免费| 欧美日本不卡| 国产精品每日更新在线播放网址| 国产精品久久久久影院色老大| 激情综合亚洲| 亚洲精品少妇网址| 极品日韩久久| 亚洲一区二区综合| 91久久国产精品91久久性色| 久久久精品一区二区三区| 亚洲日本成人| 欧美一区二区三区免费视| 麻豆精品精品国产自在97香蕉| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美日韩亚洲激情| 久久在线视频在线| 黄色成人在线网址| 最新亚洲视频| 国产一级久久| 国产精品视频免费观看www| 一区二区三区日韩欧美| 亚洲精品一线二线三线无人区| 欧美阿v一级看视频| 亚洲日本视频| 亚洲国产婷婷香蕉久久久久久| 亚洲国产一区二区三区a毛片| 性色av一区二区三区在线观看| 欧美理论视频| 国产精品久久久久秋霞鲁丝| 欧美成人午夜激情在线| 亚洲狠狠丁香婷婷综合久久久| 国产亚洲人成a一在线v站| 亚洲国产欧美日韩| 欧美伊人久久久久久午夜久久久久| 黄色一区二区三区四区| 国产性做久久久久久| 欧美视频在线不卡| 一区二区视频欧美| 亚洲国产精品一区二区尤物区| 欧美三级视频| 欧美乱妇高清无乱码| 裸体歌舞表演一区二区| 欧美日韩在线一二三| 亚洲免费在线观看| 久久综合久久美利坚合众国| 国产一区二区黄| 久久久另类综合| 麻豆精品在线视频| 久久国产婷婷国产香蕉| 久久综合一区二区三区| 免费h精品视频在线播放| 国产精品视频男人的天堂| 欧美日韩精品二区| 最新国产の精品合集bt伙计| 亚洲精品偷拍| 欧美日本高清一区| 亚洲第一视频| 在线看无码的免费网站| 午夜在线播放视频欧美| 欧美精品在线网站| 久久国产色av| 国产日韩欧美在线播放不卡| 国产精品羞羞答答| 欧美jizzhd精品欧美巨大免费| 久久免费高清| 国产一区二区三区不卡在线观看| 亚洲日本中文字幕免费在线不卡| 欧美福利视频网站| 激情综合电影网| 在线成人www免费观看视频| 欧美在线免费视频| 久久精品99国产精品日本| av成人免费在线观看| 欧美日韩久久不卡| 欧美高清hd18日本| 亚洲电影免费观看高清完整版在线| 国产精品推荐精品| 亚洲欧美日韩国产中文在线| 亚洲视频大全| 在线播放国产一区中文字幕剧情欧美| 亚洲香蕉在线观看| 欧美99在线视频观看| 亚洲欧美清纯在线制服| 99精品国产在热久久婷婷| 日韩一区二区久久| 欧美激情导航| 欧美日韩高清在线| 亚洲天堂偷拍| 久久99在线观看| 亚洲国产精品99久久久久久久久| 国内成人自拍视频| 亚洲欧美中文日韩在线| 国产欧美韩国高清| 欧美精品一区二区久久婷婷| 亚洲三级免费观看| 国产综合一区二区| 蜜臀a∨国产成人精品| 亚洲午夜精品在线| 国产欧美一区二区精品秋霞影院| 亚洲国产日韩欧美一区二区三区| 亚洲精品免费在线观看| 玖玖玖免费嫩草在线影院一区| 亚洲影院在线| 亚洲国产精品va在线看黑人动漫| 亚洲国产精品激情在线观看| 亚洲国产一区二区视频| 国产一区二区三区在线免费观看| 欧美一区二区女人| 亚洲伦理中文字幕| 国产一级精品aaaaa看| 欧美日韩免费观看一区=区三区| 欧美精品97| 亚洲美女诱惑| 国产精品私拍pans大尺度在线| 久久女同精品一区二区| 国产欧美精品日韩| 国产精品美女久久福利网站| 亚洲欧美国产一区二区三区| 欧美精品一区三区| 国内精品一区二区三区| 欧美午夜性色大片在线观看| 国产精品久久久久久久久| 亚洲精品综合精品自拍| 午夜免费电影一区在线观看| 国产精品v日韩精品v欧美精品网站| 精品av久久707| 国产九九精品| 国产精品久久久久毛片软件| 国产精品系列在线| 欧美高清在线视频| 欧美另类人妖| 一本久久综合亚洲鲁鲁五月天| 亚洲精品久久久久中文字幕欢迎你| 国产欧美在线播放| 国产精品第三页| 国产精品国产自产拍高清av王其| 国产精品视频精品视频| 在线亚洲精品福利网址导航| 欧美日韩国产精品| 国产精品天美传媒入口| 亚洲人成在线观看一区二区| 亚洲欧洲偷拍精品| 在线综合欧美| 久久精品道一区二区三区| 1000部国产精品成人观看| 国一区二区在线观看| 另类专区欧美制服同性| 夜夜精品视频| 久久综合给合久久狠狠色| 国产日韩在线不卡| 91久久精品日日躁夜夜躁欧美| 欧美日韩大陆在线| 欧美一区二区三区免费观看视频| 欧美人与禽猛交乱配| 国产亚洲制服色| 在线观看亚洲视频啊啊啊啊| 亚洲在线一区二区| 国产亚洲视频在线观看| 榴莲视频成人在线观看| 欧美三级日韩三级国产三级| 亚洲一区二区三区四区五区午夜| 久久久精品动漫| 欧美精品18videos性欧美| 一区二区三区四区五区精品视频| 亚洲一区二区三区在线| 亚洲欧美色婷婷| 日韩五码在线| 欧美日韩免费观看一区二区三区| 激情丁香综合| 久久久www成人免费无遮挡大片| 国产精品毛片a∨一区二区三区|国| 黑人一区二区三区四区五区| 在线观看中文字幕不卡| 国产日韩视频一区二区三区| 欧美顶级少妇做爰| 欧美破处大片在线视频| 国产一区二区三区久久| 亚洲一区免费在线观看| 国产农村妇女精品| 久久久久久亚洲精品杨幂换脸| 欧美女激情福利| 91久久国产综合久久蜜月精品| 欧美日韩123| 国产区精品视频| 欧美电影免费| 国产日韩欧美一二三区| 欧美日本中文字幕| 国产精品毛片a∨一区二区三区| 亚洲毛片在线观看.| 黄色亚洲在线| 亚洲第一页在线| 红桃视频亚洲| 国产亚洲a∨片在线观看| 亚洲国产精品第一区二区三区| 亚洲专区在线视频| 欧美理论电影在线播放| 亚洲视频精选| 欧美日韩久久不卡| 亚洲欧美另类在线观看| 欧美一区二区国产| 亚洲美女电影在线| 欧美承认网站| 欧美国产成人精品| 久久综合色天天久久综合图片| 国产精品美女久久久久aⅴ国产馆| 国产在线拍偷自揄拍精品| 亚洲视频一二| 国产乱肥老妇国产一区二| 欧美成ee人免费视频| 在线观看免费视频综合| 亚洲免费视频观看| 欧美日韩精品一区视频| 欧美日韩国产首页| 亚洲深夜福利| 欧美日韩免费观看一区二区三区| 国产午夜亚洲精品理论片色戒| 亚洲二区在线| 亚洲在线免费观看| 亚洲高清电影| 国产美女在线精品免费观看| 久久狠狠久久综合桃花| 亚洲一级片在线观看| 老色批av在线精品| 久久久久久久一区| 欧美日韩国产影片| 一区二区三区三区在线| 99一区二区| 久久久精品国产99久久精品芒果| 亚洲欧洲一区二区在线播放| 欧美日韩国产在线看| 久热综合在线亚洲精品| 久久精品av麻豆的观看方式| 久久日韩粉嫩一区二区三区| 亚洲一级黄色av| 欧美一区二区视频免费观看| 欧美在线看片a免费观看| 欧美一区三区二区在线观看| 亚洲综合色激情五月| 亚洲国产精品久久精品怡红院| 亚洲国产合集| 欧美ab在线视频| 亚洲欧美日本视频在线观看| 91久久精品国产91久久性色tv| 亚洲图片欧洲图片日韩av| 久久狠狠婷婷| 国内精品久久久久伊人av| 国产精品久久午夜夜伦鲁鲁| 久久国产精品第一页| 欧美国产极速在线| 欧美精品三级在线观看| 欧美波霸影院| 国产精品揄拍500视频| 久久青草久久| 欧美激情精品久久久久久久变态| 夜夜精品视频| 亚洲麻豆国产自偷在线| 亚洲激情成人| 国产欧美综合在线| 国产精品视频在线观看| 在线日韩精品视频| 欧美精品免费播放| 在线免费观看日本一区| 亚洲精品极品| 欧美一区二区三区视频在线观看| 欧美激情性爽国产精品17p| 欧美黑人在线观看| 国产一区日韩欧美| 国内成人精品一区| 亚洲欧美三级伦理| 激情欧美丁香| 欧美国产日韩一区二区三区| 在线视频观看日韩| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲二区精品| 国产精品v亚洲精品v日韩精品| 久久视频国产精品免费视频在线| 亚洲女ⅴideoshd黑人| 国产一区二区在线观看免费播放| 欧美va日韩va| 一区二区三区精品视频在线观看| 黄色亚洲精品| 在线观看不卡av| 亚洲欧美日韩国产另类专区| 欧美日韩综合在线免费观看| 午夜精品久久久久久99热| 国产偷国产偷亚洲高清97cao| 亚洲国产日韩欧美在线图片| 性娇小13――14欧美| 欧美激情第1页| 亚洲三级电影全部在线观看高清| 亚洲美女免费精品视频在线观看| 亚洲国产欧美久久| 欧美一激情一区二区三区| 午夜精品久久久久久久久久久| 在线视频欧美日韩| 亚洲欧美日韩精品久久奇米色影视| 欧美视频一区二区| 欧美成人蜜桃| 久久精品欧美日韩精品| 欧美精品性视频| 国产精品久久久久久久免费软件| 亚洲国产精品一区二区尤物区| 亚洲一二三区精品| 国产欧美一区二区精品性色| 亚洲无线视频| 亚洲激情第一页| 欧美日韩免费观看一区三区| 久久久视频精品| 久久精品99国产精品酒店日本| 欧美偷拍另类| 欧美国产日韩精品| 欧美午夜免费电影| 亚洲欧美精品suv| 欧美人与性动交α欧美精品济南到| 欧美日本在线看| 亚洲三级视频| 欧美亚洲不卡| 久久久人成影片一区二区三区观看| 免费观看在线综合色| 亚洲精品久久久久久久久久久久久| 黑人巨大精品欧美黑白配亚洲| 欧美国产日本高清在线| 日韩视频在线你懂得|