在PL/SQL里捕获错误代码

日期: 2008-09-11 作者:Karen Morton翻译:April 来源:TechTarget中国 英文

问:在PL/SQL里 ,我经常会使用以下的语句: Begin   …. Exception   When Dup_val_on_index Then …   When Others Then     XYZ := To_char(SQLCODE);     … End;   如果在PL/SQL出现了错误有什么方法可以捕获这些错误代码么?例如下……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问:在PL/SQL里 ,我经常会使用以下的语句:


Begin
  ....
Exception
  When Dup_val_on_index Then ...
  When Others Then
    XYZ := To_char(SQLCODE);
    ...
End;

  如果在PL/SQL出现了错误有什么方法可以捕获这些错误代码么?例如下面的语句:Date_var := to_date(’234w’, ’mmyy’)

  我唯一能做的事情就是声名所有可能的错误情况,将它们和ORA错误联系在一起,并一一进行检查。对于我来说,检查其他错误以及显示真正的错误代码已经足够了。


In my PL/SQL, I often use this construction:
Begin
  ....
Exception
  When Dup_val_on_index Then ...
  When Others Then
    XYZ := To_char(SQLCODE);
    ...
End;

  如果在PL/SQL出现了错误有什么方法可以捕获这些错误代码么?例如下面的语句:Date_var := to_date(’234w’, ’mmyy’)

  我能做的唯一的事情就是说明所有可能的错误情况,将它们和ORA错误联系在一起,并一一进行检查。对于我来说,检查其他错误以及显示真正的错误代码这些已经足够了。

  答:你这种方法正是你需要的。对于程序可能产生的错误情况,你要确保创建一个合适的错误处理程序。捕获所有错误的正是WHEN OTHERS。如果你仅仅是想显示真正的错误信息,那就只需要使用WHEN OTHERS,异常处理程序就足够了。如果你想捕获错误信息并且在一些错误里设置代码,你需要分别识别错误。

  你给出的这个具体的示例是由于给to_date函数赋予的无效值得原因。如果开发人员如硬编码可能在测试马上就能被捕获并且进行更改确保不再发生。但是如果你使用的示例是用户可能输入的值并可能传送至to_date,我建议在输入函数之前需要对用户输入的参数值进行数据有效性进行检测。例如:


SQL> declare
  2    date_var varchar2(10);
  3    user_entry  varchar2(4)  ;
  4    date_err  exception ;
  5  begin
  6    user_entry := ’&user_input_value’ ;
  7    if (substr(user_entry,1,2) not between 1 and 12) OR
  8       (substr(user_entry,3,2) not between 0 and 99) then
  9    raise date_err ;
 10    end if ;
 11    date_var := to_date(user_entry, ’mmyy’) ;
 12    dbms_output.put_line(date_var) ;
 13  exception
 14    when date_err then
 15       dbms_output.put_line(’You must enter a valid date in MMYY format.’) ;
 16* end ;

 SQL> /
  Enter value for user_input_value: 1299

  01-DEC-99

  PL/SQL过程成功完成

  SQL> /
  Enter value for user_input_value: 234w

  你一定要在MMYY格式里输入一个有效日期

  看一看234w是如何通过确认被捕获的?现在这一代码并不是唯一的或者是正确的输入方法。对我来说它仅仅是一个向你说明我的意思的一种快速的方法。

  希望能对你有所帮助。

翻译

April
April

相关推荐