2012-12-07 33 views
0

我想要檢查一個驗證器,檢查PL/SQL塊或主體(突出顯示爲粗體)中的可用異常塊。如何檢查異常塊是否可用於主要PLSQL塊或例程

如:

DECLARE 
some data 
     Procedure xyx IS 
     BEGIN 
     .... 
     EXCEPTION 
     .. 
     END; 

BEGIN 
some data 
     BEGIN 
     .... 
     EXCEPTION 
     .. 
     END; 
**EXCEPTION** 
some data 
     BEGIN 
     .... 
     EXCEPTION 
     .. 
     END; 
END; 

這是一個簡單的例子可以有很多其他的場景,但我需要ID查找異常塊是avaialble爲PL/SQL代碼的主要塊。

如果您有任何建議,請讓我知道。 感謝

+3

我不確定我是否理解這個問題。你想寫一個PL/SQL解析器嗎?你爲什麼要檢查一個特定的塊是否有一個異常處理程序?大多數塊不應該。 –

+0

它只是檢查該塊。只有一種驗證。 – Anshoo

回答

0

如果您使用的是Unix機器,並有GNU的awk目前,你可以試試這個:

$ awk '/Procedure/ || p==1{if (/END/)p=0;else p=1;next}/BEGIN/{f++;next}/END/{f--;next}/EXCEPTION/ && f==1{print "Exception present"}' IGNORECASE=1 file.sql 
+0

謝謝你我正在尋找一個sql查詢或pl sql代碼來做同樣的事情。 – Anshoo

0

你確定你想每個程序單元的異常處理程序?

在我看來,最好只處理具有商業意義和有點計劃的異常,並讓所有其他錯誤和問題冒泡到應用程序。

考慮使用

開始 例外 端

塊,使得用於計劃異常異常塊具有小的範圍。還要避免在大型程序單元結束時出現大的異常塊。

我在野外看到的大多數異常塊都會執行一些日誌記錄,並引發異常或完全吞下它,從而破壞堆棧跟蹤或出現問題本身。

如果您認爲必須登錄技術例外,那麼請使用dbms_utility.FORMAT_ERROR_STACK並編寫一些有用的東西。

相關問題