浅析Oracle和SqlServer存储过程的调试、出错处理

原创 2005年05月28日 16:37:00

    在大型数据库中,因为开发的需要,经常地需要调用Procedure,开发Procedure在Oracle和Sqlserver上因为语法不同,而有所区别,但是在调试上,都是比较的不容易,尤其是在一些错误处理上。

    首先说调试:

        1。对于Oracle的调试,可以借助于第三方的工具,比如Pl/Sql Developer,我在用的版本是6.0.5.926;首先对该Procedure右键处理,添加“add debug information”,然后选择“test”,打开新的测试窗口,在下方对应的输入输出变量地方,添加相应的测试数据,注意:这里的数据输入,不需要引号,输出参数不需要输入

        然后点击“start debugger”,或者按F9,进行测试,可以选择测试的步骤如“step into”等,然后可以在下面的script窗口看到,中间变量;

        2。对于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(11),@spNOTo) 方法来实现,否则会提示类型转换错误!

        3。错误处理上,对于Sqlserver可以采用开始自定义变量,然后根据不同判断,改变该值然后推出的方法来处理,见下例 

set @exec_num=0

 if (@spNOFrom=0 or @spNOTo=0 or @reuseUser=NULL)
  begin
   set @exec_num=1
   goto the_end
  end

the_end:  
 return

        或者是这种:

 set nocount on

 if (@property is null) or (@property = '')
 begin
  raiserror('Must specify a property name.',-1,-1)
  return (1)
 end

        或者是对该错误全局变量 @@error 数值的判断上

浅析Oracle和SqlServer存储过程的调试、出错处理

  在大型数据库中,因为开发的需要,经常地需要调用Procedure,开发Procedure在Oracle和Sqlserver上因为语法不同,而有所区别,但是在调试上,都是比较的不容易,尤其是在一些错...
  • ucshng
  • ucshng
  • 2007年06月07日 00:54
  • 355

Oracle存储过程转成Sqlserver存储过程

Oracle存储过程转成Sqlserver存储过程 1.日期转换Oracle: TO_NUMBER(TO_CHAR(SYSDATE, YYYYMMDD))SqlServer:CAST(CONVERT(...
  • yd2005zxq
  • yd2005zxq
  • 2010年05月20日 10:28
  • 2089

SqlServer存储过程转换成Oracle储存过程语法常见问题

1. top order by 转换成 rownum order by 的问题 (子查询实现)同级情况下的优先处理顺序: sqlserver: 先order by 再top oracl...
  • wuya814070935
  • wuya814070935
  • 2016年10月27日 10:20
  • 931

Sql Server 2008 如何调试存储过程

新建查询: use Vline_TimeSheet  ---数据库名称 -----------------声明存储过程中的变量----------------------------- ...
  • u010541219
  • u010541219
  • 2015年05月07日 13:48
  • 2455

赋予调试Oracle存储过程权限

赋予调试Oracle存储过程权限 grant debug any procedure ,debug connect session to username
  • fengbonianshao
  • fengbonianshao
  • 2013年11月14日 20:17
  • 4195

oracle存储过程无法调试

问题: 使用pl/sql developer 调试oracle 存储过程。在存储过程上点右键,选调试(test),然后按f9(debug)。这是正常的话,那些run、step into等按钮就可以点了...
  • fupei
  • fupei
  • 2010年07月09日 22:28
  • 4826

SQLServer和Oracle,存储过程区别,常用函数对比

 博主总结的很好,正好拿来理顺知识点。 原文地址:SQLServer和Oracle,存储过程区别,常用函数对比作者:创造卓越     SQL server 与Oracle...
  • wcy_1011
  • wcy_1011
  • 2015年11月27日 15:20
  • 922

Oracle 中调试、调用(带参数的)存储过程

㈠调试procedure:办法就是在程序中打印出变量的值.      1、sqlplus 上执行 “set serveroptput on”命令  2、在存储过程中可以用 DBMS_OUTPUT.PU...
  • zhd_superstar
  • zhd_superstar
  • 2011年02月28日 23:10
  • 3145

Oracle和SQL Server存储过程的不同

一.    多表连接查询,更新存储过程Sql存储过程ALTER PROCEDURE [dbo].[ GetEvent]    @SCSWId nvarchar(20)= null ,    @ToDa...
  • qudymeteor
  • qudymeteor
  • 2007年10月22日 16:38
  • 798

sql存储过程调试与跟踪

具体步骤如下: 1、将服务器【身份验证】属性设置成【混合模式】(window与sql身份验证) 2、在【控制面板】中打开【服务】将【MSSQLSERVER】服务打开【属性】,选择【登录】页面,将登...
  • tianyacao8025
  • tianyacao8025
  • 2011年10月17日 17:44
  • 1325
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅析Oracle和SqlServer存储过程的调试、出错处理
举报原因:
原因补充:

(最多只允许输入30个字)