<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • GKD-BASE PL/SQL引擎實現關鍵技術研究

    時間:2024-06-25 18:49:35 理工畢業論文 我要投稿
    • 相關推薦

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

    摘要:在數據庫管理系統GKD-BASE上設計并實現了兼容Oracle PL/SQL V2.3語言規范的PL/SQL引擎,擴展了GKD-BASE過程處理功能。

    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/SOL引擎,擴展了GKD-BASE過程處理功能。

    1 GKD-BASE PL/SQL引擎的體系結構

    GKD-BASE PL/SQL引擎的基本功能是將用戶用PL/SQL語言編寫的程序通過詞法分析程序、語法分析程序進行解析,生成中間代碼并解釋執行。如果在分析階段或解釋執行階段發現錯誤,則向用戶報告錯誤號及相應的錯誤信息,以便用戶排錯[2]。根據PL/SQL語言兼有過程式語句和SQL語句的特點,采取分治策略,把過程語句和SQL語句分開處理。PL/SQL引擎在對PL/SQL源程序編譯執行時,首先進行預處理,把SQL語句和過程語句分開;然后對SQL語句和過程語句分別解析,生成語法樹;最后通過執行模塊對中間代碼進行解釋執行。

    圖1

    GKD-BASE PL/SQL引擎對源程序編譯生成中間代碼,不能直接在目標機器上執行,需要一個解釋中間代碼的環境,以提供對PL/SQL語言中的數據類型的支持,保證PL/SQL正確執行。因此GKD-BASE PL/SQL引擎可分為編譯器和解釋器兩部分,如圖1。編譯器接收到PL/SQL語句塊后進行預處理,將句子分為SQL語句和過程語句。對于SQL語句,編譯器建立SQL語句節點,進行相應的變量綁定和語法檢查;檢查無誤后產生中間代碼。對于過程語句,編譯器對語句成分進行語法分析并建立相應的符號表,也生成中間代碼。因此,可以把編譯器劃分為SQL語言解析、過程語言解析、符號表生成與管理、中間代碼表示與管理等模塊。解釋器的作用是對編譯器生成的中間代碼進行解釋執行[3],與編譯器對應,具有獨立的SQL語句解釋模塊和過程語句解釋模塊。解釋器還包括執行狀態堆棧的管理、與GKD-BASESQL引擎的調用接口。異常處理模塊主要實現程序運行時的錯誤檢查和報告,并支持用戶自定義異常和預定義異常的檢查和處理。

    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 empWHERE birthday=v_date;

    這個SELECT語句首先把變量v_date綁定到列名birthday,然后根據條件查出相應的結果 (empno,name),并賦值給預先定義的變量(v_empno,v_name)。對于GKD-BASE的SQL引擎來說,只能識別出如下格式的SELECT語句:

    SELECT empno,name INTO:v_empno,:v_nameFROM 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引擎可以識別的格式,把游標的索引信息加入名字堆棧和

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

    【GKD-BASE PL/SQL引擎實現關鍵技術研究】相關文章:

    搜索引擎檢索子系統的設計與實現ASP+SQL11-23

    排課系統的實現Delphi+SQL11-23

    CPM搜索引擎的設計與實現03-08

    美容網站的設計與實現JSP+SQL03-08

    網絡購物系統的設計與實現ASP+SQL03-08

    購物網站的設計與實現ASP+SQL03-08

    基于JSP的BBS設計與實現JSP+SQL03-08

    新聞網系統設計與實現ASP+SQL11-23

    家庭理財系統的設計與實現VB+SQL03-08

    主站蜘蛛池模板: 91视频精品全国免费观看| 国产日韩久久久精品影院首页| www夜片内射视频日韩精品成人| 亚洲精品国产精品国自产观看| 四虎精品成人免费观看| 久久99精品久久只有精品| 欧美日韩精品系列一区二区三区| 91精品国产人成网站| 国产亚洲精品xxx| 国产午夜无码精品免费看| 亚洲AV永久无码精品一区二区国产| 亚洲精品视频在线| 国产精品无套内射迪丽热巴| 中文字幕久精品免费视频| 久久精品亚洲福利| 成人国产精品日本在线观看| 国产精品成人A区在线观看| 亚洲精品无码久久一线| 亚洲av无码成人精品区| 久久97久久97精品免视看秋霞| 91精品国产91久久| 久久91综合国产91久久精品| 国产女人精品视频国产灰线| 欧美性videos高清精品| 亚洲精品无码精品mV在线观看| 无码日韩精品一区二区人妻 | 精品亚洲麻豆1区2区3区| 在线观看国产精品普通话对白精品| 青春草无码精品视频在线观| 久久国产精品国语对白| 精品日韩在线视频一区二区三区| 国产精品无码永久免费888| 国产精品免费大片一区二区| 69堂午夜精品视频在线| 99爱在线视频这里只有精品| 亚洲精品高清视频| 91麻豆精品一二三区在线 | 国产69精品久久久久777| 国产精品久久久久久| 欧美激情精品久久久久| 国产高清在线精品一本大道国产|