1. 程式人生 > >如何在PLSQL中除錯PACKAGE包中的FUNCTION函式

如何在PLSQL中除錯PACKAGE包中的FUNCTION函式

Oracle中的packages包是一組包含procedures儲存過程、functions函式和遊標等元素的組合。相比Sybase資料庫的SQL Advantage工具,Oracle資料庫的管理工具——PLSQL在除錯儲存過程還是方便。

PLSQL Developer除錯packages包

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)。

在PLSQL中找到需要除錯的packages包

2.2 切換到“除錯”模式

在Packages包名上,右鍵選擇新增除錯資訊,如下圖所示:

在PLSQL中找到需要除錯的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除錯模式。

在functions函式上右鍵選擇測試按鈕

2.6 把實參變數的值傳給functions函式的形參變數

在2.5步驟中,會開啟如下圖的初始除錯介面。這時,我們看到的是包頭的實現程式碼(每個Package包都是從包頭宣告開始的)。可以先給函式Get_counter的3個形參變數賦值,這點和C/C#/JAVA等高階語言的除錯是一樣的。

把實參變數的值傳給functions函式的形參變數

2.7 除錯工具欄的使用

如下圖所示,PLSQL的除錯工具欄上的按鈕依次是:開始偵錯程式(F9)執行(Ctrl+R)單步進入(Ctrl+N)單步跳過(Ctrl+O)單步退出(Ctrl+T)執行到下一個異常。它們的功能和visual studio、eclipse等開發語言的IDE工具類似。在點選測試工具欄上的第一個按鈕開始偵錯程式(F9),就開始Debug了。

開啟Debug除錯

2.8 新增監控變數

在packages包函式的除錯過程中,我們可以像visual studio、eclipse等IDE那樣,手動新增一些我們需要的監控變數。同時,在除錯過程中我們還可以繼續用2.4步驟中的方法新增除錯斷點。

新增監控變數

2.9 除錯完畢,得到結果

多次點選單步進入(Ctrl+N),直到該functions函式執行到結束,最後會在介面自動輸出該函式的返回值。

除錯完畢,得到結果