在大型数据库中因为开发的需要经常需要调用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 sRequestQty * aRationQty as ReqQty
from Balance a SupplyPlan s where aVehicle = sVehicle
and aPart=sPart and aSupplyPlanNo = sSupplyPlanNo
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 数值的判断上