Oracle中的packages包是一組包含procedures存儲過程、functions函數和遊標等元素的組合。相比Sybase數據庫的SQL Advantage工具,Oracle數據庫的管理工具——PLSQL在調試存儲過程還是方便。
1 Oracle數據庫中的packages包、functions函數和procedures存儲過程的關係
Oracle數據庫中的packages包類似於Java中的packages的概念,在一個packages包中不允許定義多個相同的functions函數或者procedures存儲過程,但允許重載functions方法和procedures過程。packages包是可以被引用的,例如在C程序中調用packages包中的functions方法:
sprintf( SqlStr, "select pkg_Name.Func_Name('%s', '%s', '%d') as RESULT from dual ", sPara1, sPara2, sPara3 );
2 在PLSQL中調試packages包中functions函數
下面是自己在PL/SQL Developer Version 8.0中調試一個packages包中functions函數的演示過程:
2.1 在PLSQL中找到需要調試的packages包
如下圖所示,展開PLSQL左側菜單欄的Packages
收縮項,可以看到下面的Packages包名,這裏只有一個名爲PKG_COMM
的包(包括包頭和包體Package bodies)。
2.2 切換到“調試”模式
在Packages包名上,右鍵選擇添加調試信息
,如下圖所示:
2.3 雙擊需要調試的Packages包
查看packages包中具體的內容:鼠標雙擊PLSQL左側的packages包名(PKG_COMM),可以看到它包含的Functions函數Get_counter
和函數的3個形參變量(Pi_cnttype、Pi_Cntobj和Pi_Nowdate)。
2.4 添加測試斷點(BreakPoint)
鼠標雙擊這個函數名Get_counter
後,會在右側顯示該函數的具體實現代碼。接着在需要添加斷點的地方,用鼠標點擊代碼左側的行號位置就行了。如下圖所示,紅色的小圓圈就是添加BreakPoint。
2.5 在functions函數上右鍵選擇測試按鈕
完成上面的工作後,就可以正式進入Debug模式了。在函數名Get_counter
選項上鼠標右鍵選擇測試
菜單,進入Package調試模式。
2.6 把實參變量的值傳給functions函數的形參變量
在2.5步驟中,會打開如下圖的初始調試界面。這時,我們看到的是包頭的實現代碼(每個Package包都是從包頭聲明開始的
)。可以先給函數Get_counter
的3個形參變量賦值,這點和C/C#/JAVA等高級語言的調試是一樣的。
2.7 調試工具欄的使用
如下圖所示,PLSQL的調試工具欄
上的按鈕依次是:開始調試器(F9)
,運行(Ctrl+R)
,單步進入(Ctrl+N)
,單步跳過(Ctrl+O)
,單步退出(Ctrl+T)
,運行到下一個異常
。它們的功能和visual studio、eclipse等開發語言的IDE工具類似。在點擊測試工具欄上的第一個按鈕開始調試器(F9)
,就開始Debug了。
2.8 添加監控變量
在packages包函數的調試過程中,我們可以像visual studio、eclipse等IDE那樣,手動添加一些我們需要的監控變量。同時,在調試過程中我們還可以繼續用2.4步驟中的方法添加調試斷點。
2.9 調試完畢,得到結果
多次點擊單步進入(Ctrl+N)
,直到該functions函數運行到結束,最後會在界面自動輸出該函數的返回值。