问:在PL/SQL里 ,我经常会使用以下的语句: Begin …. Exception When Dup_val_on_index Then … When Others Then XYZ := To_char(SQLCODE); … End; 如果在PL/SQL出现了错误有什么方法可以捕获这些错误代码么?例如下……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属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是如何通过确认被捕获的?现在这一代码并不是唯一的或者是正确的输入方法。对我来说它仅仅是一个向你说明我的意思的一种快速的方法。
希望能对你有所帮助。
作者
翻译
相关推荐
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
2017年12月数据库流行度排行榜 定格岁末排名瞬间
数据库知识网站DB-engines最近更新的2017年12月份数据库流行度排名情况是否能提供更多的看点呢?TechTarget数据库网站将与您分享12月份的榜单排名情况,让我们拭目以待。
-
2017年11月数据库流行度排行榜 半数以上数据库积分减少
数据库知识网站DB-engines更新了2016年11月份的数据库流行度排行榜。TechTarget数据库网站将与您一同关注11月份的榜单排名情况。
-
控制合约 不再畏惧Oracle
许多公司都与Oracle有无限制授权协议,他们害怕离开这个协议,所以就证明他们在使用Oracle的软件,即使因为需求单独购买部分授权许可也可能总体是省钱的。