給大家說明。資料庫技術之儲存過程設計與實現
阿新 • • 發佈:2019-02-13
儲存過程的生成流程圖
在上一篇的文章中我們知道了由一個儲存過程的語句生成一個語法樹,但是這個語法樹的儲存在資料庫系統中,這裡給出一個儲存過程的儲存方案
可以看出儲存過程的原來的sql語句是儲存在一張表裡面的。並且也把儲存過程的語法樹儲存在了記憶體中,方便執行,不用再次編譯了。
儲存過程的執行流程圖
在得到了語法樹過後怎麼執行這才是關鍵的。我們為了降低系統的耦合,原來系統中有的功能呢我們就不在去實現了,就利用系統自帶的,儲存過程是一個過程性的語言,必然有很多的計算,為了降低系統的複雜度,我麼們需要把儲存過程中遇到的表示式全部交有資料庫引擎去執行,我們儲存過程中嵌入的sql語句也交給了資料庫引擎來執行。
這樣的話我們就可以不用考慮sql語句的處理。降低了耦合度,也提高了邏輯難度。
我給出的這個流程圖並沒有包括所有的執行分支,反正具體的執行流程就是這樣子的,然後其中沒一個節點的處理方法也是有的
這一部分我是參照postgresql資料庫的做法來做的
執行中的變數作用域
在儲存過程執行的過程中有的的變數的作用範圍是全域性,有的範圍是區域性,解決這一問題的方法就是使用棧的資料結構來儲存變數,這個資料結構我在上一篇文章中有給出來
這個是一篇論文中給的一副圖,不過我的堆疊式用的Map來做,這樣便於查詢,沒次查詢變數的時候就從當前層找,找不到在往上一層找。這個資料結構就很好的解決了變數作用域的問題