日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

GKD-BASE PL/SQL引擎實現(xiàn)關鍵技術研究

出處:iC921 發(fā)布于:2007-04-28 11:58:45

摘要:在數(shù)據庫管理系統(tǒng)GKD-BASE上設計并實現(xiàn)了兼容Oracle PL/SQL V2.3語言規(guī)范的PL/SQL引擎,擴展了GKD-BASE過程處理功能。

關鍵詞:過程語言PL/SQL符號表 游標

GKD-BASE數(shù)據庫是一個具有自主知識產權的數(shù)據庫管理系統(tǒng),具有兼容SQL89標準的SQL引擎,能夠為用戶提供一個統(tǒng)一、有效的數(shù)據庫訪問接口,實現(xiàn)對數(shù)據庫的各種操作。但是SQL語言缺乏對算法的描述能力,難以勝任復雜的程序設計。為了融合SQL語言強大的集合數(shù)據處理能力和第三代語言(3GL)靈活的過程處理能力,主流數(shù)據庫管理系統(tǒng)產品都已提供了對過程式SQL語言的支持,如Oracle的PL/SQL[1]。為了使GKD-BASE適應發(fā)展現(xiàn)狀,滿足管理人員和開發(fā)人員的需求,急需開發(fā)GKD-BASE自身的PL/SQL引擎。

本文在數(shù)據庫管理系統(tǒng)GKD-BASE上設計并實現(xiàn)了兼容Oracle PL/SQL V2.3語言規(guī)范的PL/SOL引擎,擴展了GKD-BASE過程處理功能。

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

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

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

2 GKD-BASE PL/SQL編譯器實現(xiàn)中的一些關鍵問題

GKD-BASE PL/SQL編譯器主要是對PL/SQL源程序進行詞法分析、語法分析和語義處理[4]。本文借助構建詞法分析器的Lex和編譯程序自動產生工具Yacc[5],實現(xiàn)了對PL/SQL源程序的編譯。下面分別說明符號表的設計與管理、SQL語句解析以及游標解析。

2.1 符號表的設計與管理

符號表是一個包含程序中的變量、自定義類型和函數(shù)信息的數(shù)據庫。通過索引對應于庫中的一條記錄;每條記錄對應著一個對象的信息,如變量的類型或函數(shù)的返回值等[2]。

考慮到PL/SQL語言的塊結構和名字作用域,可以使用名字堆棧存放源程序中所使用的標志符的索引、名字和類型。每個項目只包括名字本身和用來表明它的類型的標志值,以及該名字在符號表中的項目索引。名字堆棧采用層次結構,是鏈表型的堆棧,堆棧的每一層存放了解析的語句塊嵌套層內的所有名字信息,如。在進入或退出一個嵌套層時調用相應的壓棧和彈棧操作;查找符號時,從棧頂向棧底搜索。名字堆棧實現(xiàn)了標志符名稱與相應的符號表索引間的映射,解決了標志符的作用域問題和可見性問題,滿足了對符號表管理和調用的要求。
2.2 SQL語句的解析

為了避免SQL語句在執(zhí)行時出現(xiàn)語法錯誤,需要提前檢查其語法的正確性。SQL語句是面向集合的數(shù)據操作語言,只能交由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后面的變量用帶有冒號的數(shù)字序號代替,構造出符合SQL引擎要求的語句;完成這些處理之后,把新的語句作為字符串交由SQL引擎進行語法分析,檢查這條語句的語法是否正確,以及語句中的變量與對應的列是否匹配;返回結果,報錯或者生成語法樹。

2.3 游標的解析

游標是指向內存中上下文區(qū)的句柄或指針。借助于游標,PL/SQL程序可以控制上下文區(qū)和語句處理過程中游標的變化。PL/SQL游標按使用方式可以分為顯式游標和隱式游標。

顯式游標的使用包括聲明游標、打開游標、游標檢索、關閉游標四個步驟。編譯游標聲明語句時,首先調用SQL引擎分析SQL語句成分,轉換為SQL引擎可以識別的格式,把游標的索引信息加入名字堆棧和符號表中。游標打開操作在名字堆棧中搜索游標名字,獲取聲明階段在符號表保存的相關信息并加入到語法樹中。游標檢索語句的編譯首先獲取游標的符號表的信息;然后關聯(lián)游標中SQL語句的信息和取值變量鏈表的信息,檢查游標變量與游標引用列是否匹配;保存相關信息,加入語法樹。游標的關閉操作釋放資源并把游標狀態(tài)初始化,把游標在符號表中的信息保存并加入語法樹。

隱式游標一般用于對DML語句的處理。每條DML語句對應于一個隱式游標,編譯時可以作為一般的SQL語句來處理,直接調用GKD-BASE的SQL引擎對其進行編譯。這些語句的游標處理是由SQL引擎自動完成的,不需要PL/SQL引擎對干涉。
3 GKD-BASE PL/SQL解釋器實現(xiàn)中的一些關鍵問題

解釋器實現(xiàn)中的關鍵問題有語句的執(zhí)行、執(zhí)行狀態(tài)堆棧的設計以及返回值的處理。

對于語句的執(zhí)行,可分為SQL語句執(zhí)行和過程語句執(zhí)行兩部分,根據語法樹上相應節(jié)點分別編寫函數(shù)來完成解釋任務。這些函數(shù)例程之間也是樹狀的層次調用結構,樹根的解釋執(zhí)行依賴于其子樹上各個節(jié)點的解釋函數(shù)的成功運行。

在GKD-BASE PL/SQL引擎的解釋執(zhí)行器中,設計了“執(zhí)行狀態(tài)”的數(shù)據結構來記載函數(shù)的執(zhí)行狀態(tài)信息。解釋器中所有的解釋函數(shù)都擁有一個指針參數(shù)指向這個結構,需要在這些函數(shù)間傳遞的信息將被拷貝到這個結構。PL/SQL引擎調用子程序的過程中,構造“執(zhí)行狀態(tài)堆?!薄U{用之前,保存現(xiàn)場,將執(zhí)行狀態(tài)壓棧;調用結束后恢復現(xiàn)場,彈出當前執(zhí)行狀態(tài),回到上一層繼續(xù),如。

在語句塊執(zhí)行完畢后,解釋器會根據情況給出三種類型的返回狀態(tài):ok、exit、return。當正常執(zhí)行完一條過程語句或SQL語句后,返回ok;或者當執(zhí)行狀態(tài)當前層中所有語句都執(zhí)行正常,向上一層返回ok。當執(zhí)行時遇到EXIT關鍵字,如果執(zhí)行狀態(tài)中的退出標號與輸人參數(shù)中的退出標號一致時,說明是正常退出,返回exit。當執(zhí)行時遇到RETURN關鍵字,說明語句鏈中所有語句執(zhí)行完畢,返回return。直到到達執(zhí)行狀態(tài)頂層并給出返回值,結束整個解釋執(zhí)行過程。



  
關鍵詞:GKD-BASE PL/SQL引擎實現(xiàn)關鍵技術研究

版權與免責聲明

凡本網注明“出處:維庫電子市場網”的所有作品,版權均屬于維庫電子市場網,轉載請必須注明維庫電子市場網,http://www.hbjingang.com,違反者本網將追究相關法律責任。

本網轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網贊同其觀點或證實其內容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網站或個人從本網轉載時,必須保留本網注明的作品出處,并自負版權等法律責任。

如涉及作品內容、版權等問題,請在作品發(fā)表之日起一周內與本網聯(lián)系,否則視為放棄相關權利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務:
賣家服務:
技術客服:

0571-85317607

網站技術支持

13606545031

客服在線時間周一至周五
9:00-17:30

關注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務的動力!意見一經采納,將有感恩紅包奉上哦!