在大型數據庫中
因為開發的需要
經常需要調用Procedure
在Oracle和SQLServer上開發Procedure因為語法不同
而有所區別
調試Procedure
在兩個系統上都不太容易
尤其是進行錯誤處理時更是如此
首先說調試
對於Oracle的調試
可以借助於第三方的工具
比如Pl/SQL Developer
以
版本為例
首先對該Procedure右鍵處理
添加
add debug information
然後選擇
test
打開新的測試窗口
在下方對應的輸入輸出變量處
添加相應的測試數據
注意
這裡的數據輸入
不需要引號
輸出參數不需要輸入!
然後點擊
start debugger
或者按F
進行測試
可以選擇測試的步驟如
step into
等
然後可以在下面的script窗口看到中間變量
對於SQLServer調試
在沒有找到較好的第三方工具的情況下
目前采用的是將中間的變量值或者SQL語句插入到另一個表中
或者直接print出來的方式
第一種需要借助 exec(
) 方法
注意裡面的取變量值的寫法
可參考下面的例子
exec(
update SupplyplanLack set Completedate = GetDate()
from supplyPlanLack a where
+ @ssTmp +
and
+@iCompleteQty+
>= (select s
RequestQty * a
RationQty as ReqQty
from Balance a
SupplyPlan s where a
Vehicle = s
Vehicle
and a
Part=s
Part and a
SupplyPlanNo = s
SupplyPlanNo
and
+ @ssTmp +
)
)
在print中
需要注意類型的轉換
一般是借用 convert(varchar(
)
@spNOTo) 方法來實現
否則會提示類型轉換錯誤
錯誤處理上
對於SQLServer可以采用開始自定義變量
然後根據不同判斷
改變該值再推出的方法來處理
見下例
set @exec_num=
if (@spNOFrom=
or @spNOTo=
or @reuseUser=NULL)
begin
set @exec_num=
goto the_end
end
the_end:
return
或者是這種
set nocount on
if (@property is null) or (@property =
)
begin
raiserror(
Must specify a property name
)
return (
)
end
或者是對該錯誤全局變量 @@error 數值的判斷上
From:http://tw.wingwit.com/Article/program/Oracle/201311/18100.html