專利名稱:神通數(shù)據(jù)庫的包機制的實現(xiàn)方法
技術領域:
本發(fā)明屬于數(shù)據(jù)庫應用技術領域,尤其是一種神通數(shù)據(jù)庫的包機制的實現(xiàn)方法。
背景技術:
Oracle數(shù)據(jù)庫中的包是使用包名進行分組的PL/SQL語句塊的集合,它含有存儲 過程、函數(shù)和全局變量等。使用包來綁定存儲過程和函數(shù)具有如下優(yōu)點(1)良好設計的包 是對象(如存儲過程、函數(shù)、全局變量等)的邏輯分組,當?shù)谝淮握{(diào)用包時,所有的代碼被加 載到內(nèi)存,即第一次調(diào)用包的成本雖然較高,但是之后的調(diào)用處理性能會比較高,因此,在 應用程序中使用包,能夠比較經(jīng)濟地反復使用存儲過程和函數(shù);( 使用包可以收集類似 的存儲過程和函數(shù),并賦予公共的上下文,實現(xiàn)對它們的封裝;(3)在包中可以創(chuàng)建私有的 存儲過程和函數(shù),只能被相同包中的其他存儲過程和函數(shù)調(diào)用,這樣實現(xiàn)了信息隱藏。綜上 所述,Oracle包機制在數(shù)據(jù)庫后臺和網(wǎng)絡傳輸上不僅提高了執(zhí)行效率,而且信息隱藏的特 點提高了數(shù)據(jù)庫的安全性。但是,Oracle包機制的實現(xiàn)細節(jié)是不公開的。目前,神通數(shù)據(jù)庫雖然也開發(fā)了自身的過程式SQL語言,但是和Oracle這樣成熟 的數(shù)據(jù)庫相比,在功能完備性和執(zhí)行效率方面存在一定差距,尤其是不支持包功能,使得基 于Oracle開發(fā)的應用程序不能與神通數(shù)據(jù)庫進行無縫對接,移植的工作量比較大;另外, 基于神通數(shù)據(jù)庫的復雜應用邏輯,僅僅使用存儲過程和函數(shù)的效率沒有使用包機制的效率 尚ο
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術的不足,提供一種全面兼容Orac Ie PL/ SQLPackage的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,解決了神通數(shù)據(jù)庫與基于Oracle開發(fā)的 應用程序的無縫對接功能,提高了神通數(shù)據(jù)庫的執(zhí)行效率。本發(fā)明解決現(xiàn)有的技術問題是采取以下技術方案實現(xiàn)的一種神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,包括包的創(chuàng)建方法、包的執(zhí)行方法、包的編 譯方法和包的刪除方法,通過包的創(chuàng)建、包的執(zhí)行、包的編譯和包的刪除處理對包的系統(tǒng) 表、包管理器和包實例進行管理,從而在神通數(shù)據(jù)庫上實現(xiàn)包機制的功能。而且,所述包的系統(tǒng)表包括關系系統(tǒng)表、源碼系統(tǒng)表、依賴關系系統(tǒng)表、包變量系 統(tǒng)表和包子程序系統(tǒng)表;該關系系統(tǒng)表存放包與表關系的唯一標識號、名稱、關系類型和所 屬模式信息;該源碼系統(tǒng)表按行存放包頭和包體的源碼,該源碼系統(tǒng)表得字段含有包的唯 一標識號、名稱、包頭和包體的區(qū)別標識、源碼的行號和每行源碼;該依賴關系系統(tǒng)表存放 依賴與被依賴對象的唯一標識;該包變量系統(tǒng)表存放包的唯一標識號、全局變量名稱、包頭 和包體的變量的區(qū)別標識;該包子程序系統(tǒng)表存放包的子程序的唯一標識號、參數(shù)的數(shù)據(jù) 類型、參數(shù)的輸入和輸出類型、參數(shù)名稱、存儲過程和函數(shù)的區(qū)別標識、子程序公有和私有 區(qū)別標識、對應包的唯一標識號。而且,所述的包管理器由多個包項目組成,每個包項目包括包的唯一標識號、包頭和包體是否失效、包被置為有效時的時間戳、包頭和包體的語法樹、以及包中存儲過程和函 數(shù)的語法樹,在包管理器上擁有一個讀寫鎖。而且,所述的包實例是在用戶會話過程中建立的會話級的哈希表,該哈希表用于 存放被使用的包的信息,該包實例所對應的包包括包的唯一標識號、包頭聲明的公有全局 變量的拷貝、包體聲明的私有全局變量的拷貝、以及包被置為有效時的時間戳的拷貝。而且,所述的包的創(chuàng)建方法包括包頭的創(chuàng)建方法和包體的創(chuàng)建方法,其中,包頭的 創(chuàng)建方法包括如下步驟(1)語法解析模塊對包頭創(chuàng)建語句的解析;(2)包頭在關系系統(tǒng)表中的存儲;(3)包頭源碼在源碼系統(tǒng)表中的存儲;(4)過程語言模塊對包頭聲明部分的編譯;(5)包頭對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲;(6)包頭依賴關系在依賴關系系統(tǒng)表中的存儲;(7)包管理器中新增包項目;所述的包體的創(chuàng)建方法包括如下步驟(1)語法解析模塊對包體創(chuàng)建語句的解析;(2)檢查包頭是否編譯;(3)包體在關系系統(tǒng)表和包體源碼在源碼系統(tǒng)表中的存儲;(4)過程語言模塊對包體的解析;(5)包體對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲;(6)包體對包頭的依賴性檢查;(7)在包管理器中對應包項目增加包體信息。而且,所述的包的執(zhí)行方法包括以下步驟(1)確定包和子程序的唯一標識號;(2)獲取包項目;(3)獲取包實例;(4)調(diào)用包中的子程序的語法樹;(5)如果存在包的嵌套調(diào)用,則轉(zhuǎn)到第(2)步重復執(zhí)行;(6)事物結束。而且,所述的包的編譯方法是在包失效時對包進行重新編譯的處理方法,包括以 下步驟(1)語法解析模塊對包編譯語句進行解析,如果編譯語句為編譯包體,則執(zhí)行步驟 (3)的包體編譯步驟,否則執(zhí)行步驟O)的包頭的編譯步驟和步驟(3)的包體的編譯步驟;(2)包頭的編譯步驟首先對包管理器加寫鎖;然后在源碼系統(tǒng)表中獲取包頭源 碼,編譯包頭,重置包頭對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲,重置包頭在依賴 關系系統(tǒng)表中的存儲;重置包管理器中的包項目;即將包體的有效標識置為假,另外將依 賴于該包的其他包的有效標識置為假;(3)包體的編譯步驟首先對包管理器加寫鎖;然后從源碼系統(tǒng)表中獲取包體源 碼對包體進行編譯,重置包變量系統(tǒng)表、包子程序系統(tǒng)表、依賴關系系統(tǒng)表中的存儲;最后更新包項目中的包體編譯信息,即將包體編譯有效位置為真并更新時間戳,釋放包管理器 的寫鎖。而且,所述的包失效的判斷方法為(1)包頭和包體在被創(chuàng)建后并且未被引用之前,處于失效狀態(tài);(2)包依賴的關系被刪除或結構發(fā)生變化,對應的包頭或包體失效;(3)包頭失效時,包體失效;調(diào)用它的子程序失效;(4)包頭被重新創(chuàng)建,包頭失效;(5)包體被重新創(chuàng)建,包體失效;(6)包頭被重新編譯,包體失效;(7)包頭被刪除,包頭和包體失效;(8)包體被刪除,包體失效;(9)子程序被創(chuàng)建,引用失效包,包頭變?yōu)橛行?,包體還是無效。而且,所述的包的刪除方法包括以下步驟(1)語法解析模塊對包刪除語句進行解析,如果包刪除語句為刪除包體,則執(zhí)行步 驟(3)的包體的刪除步驟;否則執(zhí)行步驟O)的包頭刪除和步驟(3)的包體的刪除步驟;(2)包頭的刪除步驟首先對包管理器加寫鎖,刪除包對應的包項目,并將引用此 包的其他包的包頭有效位置為假,釋放包管理器的寫鎖;然后清除包頭和包體在包變量系 統(tǒng)表、源碼系統(tǒng)表、關系系統(tǒng)表和依賴關系系統(tǒng)表中的記錄;(3)包體的刪除步驟對包管理器加寫鎖,將包項目中的包體的有效標識置為假, 釋放包管理器的寫鎖;然后清除包體在包變量系統(tǒng)表、源碼系統(tǒng)表、關系系統(tǒng)表和依賴關系 系統(tǒng)表中的記錄。本發(fā)明的優(yōu)點和積極效果是1、本發(fā)明通過包的創(chuàng)建、包的執(zhí)行、包的編譯和包的刪除處理對包的系統(tǒng)表、包管 理器和包實例進行管理,從而在神通數(shù)據(jù)庫上實現(xiàn)包機制的功能,將復雜的應用邏輯中相 關的方法或操作轉(zhuǎn)換為存儲過程或函數(shù),將存儲過程和函數(shù)共同操作的數(shù)據(jù)轉(zhuǎn)化為全局變 量,然后將這些存儲過程、函數(shù)和全局變量組合成神通數(shù)據(jù)庫的包,通過將復雜的應用邏輯 轉(zhuǎn)化為神通數(shù)據(jù)庫服務器上的包,可以大大減少網(wǎng)絡上數(shù)據(jù)的傳輸,降低應用開發(fā)的工作 量。2、本發(fā)明通過包機制使得用戶能夠訪問包中的存儲過程、函數(shù)和全局變量,并可 查看包頭中存儲過程、函數(shù)和全局變量的聲明,但是隱藏了包體中它們的定義,提高了神通 數(shù)據(jù)庫的安全性。3、本發(fā)明通過包機制使得每個用戶共享包中存儲過程和函數(shù)的語法樹,同時另有 屬于自己的全局變量的拷貝,從而即保證了包的操作的高效率,又保證了每個用戶數(shù)據(jù)的 獨立性。
圖1是包頭的創(chuàng)建方法流程圖;圖2是包體的創(chuàng)建方法流程圖;圖3是包的執(zhí)行方法流程圖4是包的編譯方法流程圖;圖5是包的刪除方法流程圖。
具體實施例方式以下結合附圖對本發(fā)明實施例做進一步詳述。一種神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,包括包的創(chuàng)建方法、包的執(zhí)行方法、包的編 譯方法和包的刪除方法,通過包的創(chuàng)建、包的執(zhí)行、包的編譯和包的刪除處理對包的系統(tǒng) 表、包管理器和包實例進行管理,從而在神通數(shù)據(jù)庫上實現(xiàn)包機制的功能。包的系統(tǒng)表用來存放與包有關的信息,包括關系系統(tǒng)表、源碼系統(tǒng)表、依賴關系 系統(tǒng)表、包變量系統(tǒng)表和包子程序系統(tǒng)表。其中關系系統(tǒng)表存放包、表等關系的唯一標識 號、名稱、關系類型、所屬模式等信息;源碼系統(tǒng)表按行存放包頭和包體的源碼,其字段有包 的唯一標識號、名稱、包頭和包體的區(qū)別標識、源碼的行號和每行源碼;依賴關系系統(tǒng)表存 放依賴與被依賴對象的唯一標識;包變量系統(tǒng)表存放包的唯一標識號、全局變量名稱、包頭 和包體的變量的區(qū)別標識;包子程序系統(tǒng)表存放包的子程序的唯一標識號、參數(shù)的數(shù)據(jù)類 型、參數(shù)的輸入和輸出類型、參數(shù)名稱、存儲過程和函數(shù)的區(qū)別標識、子程序公有和私有區(qū) 別標識、對應包的唯一標識號等。包管理器在神通數(shù)據(jù)庫中具有全局屬性,由多個包項目組成,每個包項目對應一 個包;它記錄了包的唯一標識號、包頭和包體是否失效、包被置為有效時的時間戳、包頭和 包體的語法樹、以及包中存儲過程和函數(shù)的語法樹。包管理器上還擁有一個讀寫鎖,當遍歷 包管理器時,加讀鎖;當創(chuàng)建或刪除包時,加寫鎖。包實例是在神通數(shù)據(jù)庫的用戶會話過程中建立的會話級的哈希表,該哈希表用于 存放被使用的包的信息。每個包實例對應一個包,它記錄了包的唯一標識號、包頭聲明的公 有全局變量的拷貝、包體聲明的私有全局變量的拷貝、以及包被置為有效時的時間戳的拷 貝。下面分別對神通數(shù)據(jù)庫的包的創(chuàng)建方法、包的執(zhí)行方法、包的編譯方法和包的刪 除方法分別進行說明。1、包的創(chuàng)建方法包括包頭的創(chuàng)建方法和包體的創(chuàng)建方法。如圖1所示,包頭的創(chuàng)建過程包括以下步驟(1)語法解析模塊對包頭創(chuàng)建語句的解析在本步驟中,語法解析模塊負責對包頭除聲明語句外的定義部分的解析,確認包 的創(chuàng)建語法正確性,并獲取包的名稱和所屬模式。(2)包頭在關系系統(tǒng)表中的存儲在本步驟中,語言定義模塊為包分配唯一標識號,并將唯一標識號、包名、所屬模 式等存放于關系系統(tǒng)表中。(3)包頭源碼在源碼系統(tǒng)表中的存儲在本步驟中,語言定義模塊負責包在關系系統(tǒng)表中的存儲和包頭源碼在源碼系統(tǒng) 表中的存儲。(4)過程語言模塊對包頭聲明部分的編譯在本步驟中,過程源碼模塊從源碼系統(tǒng)表中獲取全局變量、存儲過程和函數(shù)的聲明進行編譯。(5)包頭對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲在本步驟中,過程語言模塊將上一步編譯出的全局變量的信息存入包變量系統(tǒng) 表,將存儲過程和函數(shù)的信息存入包子程序系統(tǒng)表。(6)包頭依賴關系在依賴關系系統(tǒng)表中的存儲在本步驟中,過程語言模塊將包的唯一標識號和被引用的其他包和表的唯一標識 號存放與依賴關系系統(tǒng)表中。(7)包管理器中新增包項目在本步驟中,首先對包管理器加寫鎖;然后構造一個新的包項目,存入包的唯一標 識號、包頭的語法樹,將包頭的有效標識置為真;最后釋放包管理器的寫鎖。如圖2所示,包體的創(chuàng)建方法,包括以下步驟(1)語法解析模塊對包體創(chuàng)建語句的解析在本步驟中,同包頭的創(chuàng)建一樣,語法解析模塊負責對創(chuàng)建包體的語句進行解析, 確認包的創(chuàng)建語法正確性,并獲取包的名稱和所屬模式。(2)檢查包頭是否編譯在本步驟中,語法解析模塊檢查包頭后,如果包頭沒有編譯,則對包頭進行編譯, 即從源碼系統(tǒng)表中獲取包頭的源碼,過程語言模塊對包頭的聲明部分進行編譯,然后將包 頭對象存放于包變量系統(tǒng)表和包子程序系統(tǒng)表中,將包對其他包和表的依賴關系存放于依 賴關系系統(tǒng)表中,并在包管理器中新增包項目。(3)包體在關系系統(tǒng)表和包體源碼在源碼系統(tǒng)表中的存儲在本步驟中,語言定義模塊為包體在關系系統(tǒng)表中分配唯一標志號,并將包體的 源代碼寫入源碼系統(tǒng)表中。(4)過程語言模塊對包體的解析在本步驟中,過程語言模塊將包體中的聲明語句、子程序的定義語句和初始化語 句分別進行解析。在包體的存儲過程或函數(shù)的定義中,嵌套引用了存儲過程或函數(shù),如果引 用的是本包的、隱含的包名在解析時必須補上。包的存儲過程或函數(shù)被引用前,必須先聲明 它。(5)包體對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲包體對象是包的私有對象,在本步驟中,過程語言模塊將包體對象存儲在包變量 系統(tǒng)表和包子程序系統(tǒng)表中。(6)包體對包頭的依賴性檢查在本步驟中,過程語言模塊進行包體對包頭的依賴性檢查,由于包體的解析不僅 要檢查語句塊是否符合語法規(guī)則,還要檢查包體中的過程或函數(shù)的說明和包頭中對應的過 程或函數(shù)是否完全相同。該依賴性檢查具體方法為包頭中聲明的函數(shù)或存儲過程在包體 中有同名的對象;函數(shù)或存儲過程的參數(shù)個數(shù)相同;函數(shù)或存儲過程的參數(shù)的數(shù)據(jù)類型相 同;函數(shù)或存儲過程的參數(shù)的輸入輸出類型相同;在包頭和包體的聲明語句部分,不能聲 明相同名字的變量。(7)在包管理器中對應包項目增加包體信息在本步驟中,首先對包管理器加寫鎖;然后找到包管理器中對應該包的包項目,將包體的語法樹加入,并把包體有效標識置為真,另外記錄有效時的時間戳;最后釋放包管理 器的寫鎖。2、包的執(zhí)行方法。神通數(shù)據(jù)庫對包的執(zhí)行采用編譯預處理技術,即在詞法掃描中發(fā)現(xiàn)對包中對象的 調(diào)用語句后,立即找到包的源代碼進行解析,然后將解析結果的指針放到包管理器中。在執(zhí) 行包的對象調(diào)用語句時,根據(jù)存儲過程或函數(shù)的標志號直接定位到它的語法樹然后解釋執(zhí) 行該語法樹。如果找不到對應的語法樹,判斷包是否失效,如果是則重新編譯;如果不是則 提取源碼進行重編譯。由于包的預編譯只需要編譯一次包的源代碼,在包中對象被多次引 用的情況下,可以避免每次執(zhí)行該對象時的重復編譯,從而提高了包的執(zhí)行效率。如圖3所示,包的執(zhí)行方法包括以下步驟(1)確定包和子程序的唯一標識號在本步驟中,通過對“模式名.包名.包中對象名”的解析,確定包中存儲過程或 函數(shù)的唯一標識號。(2)獲取包項目在本步驟中,對包管理器加讀鎖;定位到當前包的包項目,如果有包頭或包體失 效,則對它進行重新編譯。(3)獲取包實例在本步驟中,如果是本會話中首次執(zhí)行該包中的對象,則對包進行初始化操作。首 先,從包項目拷貝該包的全局變量和有效時的時間戳,然后執(zhí)行初始化代碼,最后將這個包 實例插入本會話中的哈希表中;如果不是首次執(zhí)行該包中的對象,則定位到本會話中的當 前包的包實例,判斷它和對應的包項目的時間戳是否相等。如果不相等,則對包進行再次初 始化操作。(4)調(diào)用包中的子程序的語法樹在本步驟中,通過存儲過程或函數(shù)的唯一標識號,由此調(diào)用對應的語法樹。如果涉 及全局變量的讀寫,則對本會話中的包實例的全局變量的拷貝進行操作。(5)如果存在包的嵌套調(diào)用,則轉(zhuǎn)到第(2)步重復執(zhí)行(6)事物結束在本步驟中,事物結束時將自動釋放包管理器的讀鎖。3、包的編譯方法在神通數(shù)據(jù)庫中,當包失效時,需要對包進行重新編譯。在如下情況下,包處于失 效狀態(tài)(1)包頭和包體在被創(chuàng)建后并且未被引用之前,處于失效狀態(tài);(2)包依賴的關系被刪除或結構發(fā)生變化,對應的包頭或包體失效;(3)包頭失效時,包體失效;調(diào)用它的子程序失效;(4)包頭被重新創(chuàng)建,包頭失效;(5)包體被重新創(chuàng)建,包體失效;(6)包頭被重新編譯,包體失效;(7)包頭被刪除,包頭和包體失效;(8)包體被刪除,包體失效;
(9)子程序被創(chuàng)建,引用失效包,包頭變?yōu)橛行?,包體還是無效。當包失效時,在包管理器中設置失效標識,并刪除包變量系統(tǒng)表、包子程序系統(tǒng)表 中的該包的對象對應的信息。包每次被執(zhí)行時,都需要判斷包頭和包體是否失效,如果包失 效,則需要進行包的編譯處理。如圖4所示,包的編譯方法包括以下步驟(1)語法解析模塊對包編譯語句進行解析,如果編譯語句為編譯包體,則執(zhí)行步驟 (3)的包體編譯步驟,否則執(zhí)行步驟O)的包頭的編譯步驟和步驟(3)的包體的編譯步驟;(2)包頭的編譯步驟首先對包管理器加寫鎖;然后在源碼系統(tǒng)表中獲取包頭源 碼,編譯包頭,重置包頭對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲,重置包頭在依賴 關系系統(tǒng)表中的存儲;重置包管理器中的包項目;即將包體的有效標識置為假,另外將依 賴于該包的其他包的有效標識置為假;(3)包體的編譯步驟首先對包管理器加寫鎖;然后從源碼系統(tǒng)表中獲取包體源 碼對包體進行編譯,重置包變量系統(tǒng)表、包子程序系統(tǒng)表、依賴關系系統(tǒng)表中的存儲;最后 更新包項目中的包體編譯信息,即將包體編譯有效位置為真并更新時間戳,釋放包管理器 的寫鎖。4、包的刪除方法如圖5所示,包的刪除方法包括以下步驟(1)語法解析模塊對包刪除語句進行解析,如果包刪除語句為刪除包體,則執(zhí)行步 驟(3)的包體的刪除步驟;否則執(zhí)行步驟O)的包頭刪除和步驟(3)的包體的刪除步驟;(2)包頭的刪除步驟首先對包管理器加寫鎖,刪除包對應的包項目,并將引用此 包的其他包的包頭有效位置為假,釋放包管理器的寫鎖;然后清除包頭和包體在包變量系 統(tǒng)表、源碼系統(tǒng)表、關系系統(tǒng)表和依賴關系系統(tǒng)表中的記錄;(3)包體的刪除步驟對包管理器加寫鎖,將包項目中的包體的有效標識置為假, 釋放包管理器的寫鎖;然后清除包體在包變量系統(tǒng)表、源碼系統(tǒng)表、關系系統(tǒng)表和依賴關系 系統(tǒng)表中的記錄。本發(fā)明所述的實施例是說明性的,而不是限定性的,因此發(fā)明并不限于具體實施 方式中所述的實施例,凡是由本領域技術人員根據(jù)本發(fā)明的技術方案得出的其他實施方 式,同樣屬于本發(fā)明保護的范圍。
權利要求
1.一種神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于包括包的創(chuàng)建方法、包的執(zhí)行 方法、包的編譯方法和包的刪除方法,通過包的創(chuàng)建、包的執(zhí)行、包的編譯和包的刪除處理 對包的系統(tǒng)表、包管理器和包實例進行管理,從而在神通數(shù)據(jù)庫上實現(xiàn)包機制的功能。
2.根據(jù)權利要求1所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于所述包的系 統(tǒng)表包括關系系統(tǒng)表、源碼系統(tǒng)表、依賴關系系統(tǒng)表、包變量系統(tǒng)表和包子程序系統(tǒng)表;該 關系系統(tǒng)表存放包與表關系的唯一標識號、名稱、關系類型和所屬模式信息;該源碼系統(tǒng)表 按行存放包頭和包體的源碼,該源碼系統(tǒng)表得字段含有包的唯一標識號、名稱、包頭和包體 的區(qū)別標識、源碼的行號和每行源碼;該依賴關系系統(tǒng)表存放依賴與被依賴對象的唯一標 識;該包變量系統(tǒng)表存放包的唯一標識號、全局變量名稱、包頭和包體的變量的區(qū)別標識; 該包子程序系統(tǒng)表存放包的子程序的唯一標識號、參數(shù)的數(shù)據(jù)類型、參數(shù)的輸入和輸出類 型、參數(shù)名稱、存儲過程和函數(shù)的區(qū)別標識、子程序公有和私有區(qū)別標識、對應包的唯一標 識號。
3.根據(jù)權利要求1所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于所述的包管 理器由多個包項目組成,每個包項目包括包的唯一標識號、包頭和包體是否失效、包被置為 有效時的時間戳、包頭和包體的語法樹、以及包中存儲過程和函數(shù)的語法樹,在包管理器上 擁有一個讀寫鎖。
4.根據(jù)權利要求1所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于所述的包實 例是在用戶會話過程中建立的會話級的哈希表,該哈希表用于存放被使用的包的信息,該 包實例所對應的包包括包的唯一標識號、包頭聲明的公有全局變量的拷貝、包體聲明的私 有全局變量的拷貝、以及包被置為有效時的時間戳的拷貝。
5.根據(jù)權利要求1至4任一項所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于 所述的包的創(chuàng)建方法包括包頭的創(chuàng)建方法和包體的創(chuàng)建方法,其中,包頭的創(chuàng)建方法包括 如下步驟(1)語法解析模塊對包頭創(chuàng)建語句的解析;(2)包頭在關系系統(tǒng)表中的存儲;(3)包頭源碼在源碼系統(tǒng)表中的存儲;(4)過程語言模塊對包頭聲明部分的編譯;(5)包頭對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲;(6)包頭依賴關系在依賴關系系統(tǒng)表中的存儲;(7)包管理器中新增包項目;所述的包體的創(chuàng)建方法包括如下步驟(1)語法解析模塊對包體創(chuàng)建語句的解析;(2)檢查包頭是否編譯;(3)包體在關系系統(tǒng)表和包體源碼在源碼系統(tǒng)表中的存儲;(4)過程語言模塊對包體的解析;(5)包體對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲;(6)包體對包頭的依賴性檢查;(7)在包管理器中對應包項目增加包體信息。
6.根據(jù)權利要求1至4任一項所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于所述的包的執(zhí)行方法包括以下步驟(1)確定包和子程序的唯一標識號;(2)獲取包項目;(3)獲取包實例;(4)調(diào)用包中的子程序的語法樹;(5)如果存在包的嵌套調(diào)用,則轉(zhuǎn)到第(2)步重復執(zhí)行;(6)事物結束。
7.根據(jù)權利要求1至4任一項所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于 所述的包的編譯方法是在包失效時對包進行重新編譯的處理方法,包括以下步驟(1)語法解析模塊對包編譯語句進行解析,如果編譯語句為編譯包體,則執(zhí)行步驟(3) 的包體編譯步驟,否則執(zhí)行步驟O)的包頭的編譯步驟和步驟(3)的包體的編譯步驟;(2)包頭的編譯步驟首先對包管理器加寫鎖;然后在源碼系統(tǒng)表中獲取包頭源碼,編 譯包頭,重置包頭對象在包變量系統(tǒng)表、包子程序系統(tǒng)表中的存儲,重置包頭在依賴關系系 統(tǒng)表中的存儲;重置包管理器中的包項目;即將包體的有效標識置為假,另外將依賴于該 包的其他包的有效標識置為假;(3)包體的編譯步驟首先對包管理器加寫鎖;然后從源碼系統(tǒng)表中獲取包體源碼對 包體進行編譯,重置包變量系統(tǒng)表、包子程序系統(tǒng)表、依賴關系系統(tǒng)表中的存儲;最后更新 包項目中的包體編譯信息,即將包體編譯有效位置為真并更新時間戳,釋放包管理器的寫 鎖。
8.根據(jù)權利要求7所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于所述的包失 效的判斷方法為(1)包頭和包體在被創(chuàng)建后并且未被引用之前,處于失效狀態(tài);(2)包依賴的關系被刪除或結構發(fā)生變化,對應的包頭或包體失效;(3)包頭失效時,包體失效;調(diào)用它的子程序失效;(4)包頭被重新創(chuàng)建,包頭失效;(5)包體被重新創(chuàng)建,包體失效;(6)包頭被重新編譯,包體失效;(7)包頭被刪除,包頭和包體失效;(8)包體被刪除,包體失效;(9)子程序被創(chuàng)建,引用失效包,包頭變?yōu)橛行?,包體還是無效。
9.根據(jù)權利要求1至4任一項所述的神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,其特征在于 所述的包的刪除方法包括以下步驟(1)語法解析模塊對包刪除語句進行解析,如果包刪除語句為刪除包體,則執(zhí)行步驟 (3)的包體的刪除步驟;否則執(zhí)行步驟O)的包頭刪除和步驟(3)的包體的刪除步驟;(2)包頭的刪除步驟首先對包管理器加寫鎖,刪除包對應的包項目,并將引用此包的 其他包的包頭有效位置為假,釋放包管理器的寫鎖;然后清除包頭和包體在包變量系統(tǒng)表、 源碼系統(tǒng)表、關系系統(tǒng)表和依賴關系系統(tǒng)表中的記錄;(3)包體的刪除步驟對包管理器加寫鎖,將包項目中的包體的有效標識置為假,釋放 包管理器的寫鎖;然后清除包體在包變量系統(tǒng)表、源碼系統(tǒng)表、關系系統(tǒng)表和依賴關系系統(tǒng)表中的記錄。
全文摘要
本發(fā)明涉及一種神通數(shù)據(jù)庫的包機制的實現(xiàn)方法,包括包的創(chuàng)建方法、包的執(zhí)行方法、包的編譯方法和包的刪除方法,通過包的創(chuàng)建、包的執(zhí)行、包的編譯和包的刪除處理對包的系統(tǒng)表、包管理器和包實例進行管理,從而在神通數(shù)據(jù)庫上實現(xiàn)包機制的功能。本發(fā)明實現(xiàn)了神通數(shù)據(jù)庫與基于Oracle開發(fā)的應用程序的無縫對接功能,通過將復雜的應用邏輯轉(zhuǎn)化為神通數(shù)據(jù)庫服務器上的包,可以大大減少網(wǎng)絡上數(shù)據(jù)的傳輸,降低應用開發(fā)的工作量,提高了神通數(shù)據(jù)庫的執(zhí)行效率。
文檔編號G06F17/30GK102054050SQ20111003336
公開日2011年5月11日 申請日期2011年1月30日 優(yōu)先權日2011年1月30日
發(fā)明者何清法, 馮柯, 周麗霞, 孫鵬, 尚博, 彭賀, 胡秀龍, 蔣志勇, 謝衛(wèi)平, 顧云蘇 申請人:天津神舟通用數(shù)據(jù)技術有限公司