oracle中的continue用法

oracle中的continue用法

ID:34724944

大小:51.50 KB

页数:3页

时间:2019-03-10

oracle中的continue用法_第1页
oracle中的continue用法_第2页
oracle中的continue用法_第3页
资源描述:

《oracle中的continue用法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、因为以前看到有的同事sql脚本中的一些写法,本意是使用oracle的continue用法,结果却事与愿违。我正好周末无事时写了一个脚本,用到这个,现分享给大家。我们知道,像C、JAVA、C#等编程语言中都有continue,连python这种解释性语言都有continue,那oracle有没有continue呢?具体说,是有的,但要在oracle11g之后才有。那对于10g跟之前的版本要如何实现continue的用法呢?看下面的脚本,只选了部分的内容:forcinget_info(v_seg)loopif(c.last_analyzedisnullorround(sysda

2、te-c.last_analyzed)>v_days)thenbegindbms_stats.gather_table_stats(ownname=>c.owner,tabname=>c.table_name,partname=>null,estimate_percent=>0.0001);exceptionwhenothersthennull;end;endif;endloop;这段sql主要用途是对一个cursor中的所有表进行统计信息收集,其实完全可以使用一个这样的循环就可以搞定的:forcinget_info(v_seg)loopif(c.last_analyzed

3、isnullorround(sysdate-c.last_analyzed)>v_days)thendbms_stats.gather_table_stats(ownname=>c.owner,tabname=>c.table_name,partname=>null,estimate_percent=>0.0001);endif;endloop;但是,由于统计信息收集时,有时会遇到权限不足(按我们的库经常会遇到)的问题,如果报错,将跳出此循环,其他的表将得不到统计信息收集。这时需要我们使用continue,来跳过此循环,去分析下一个表。但此库正好是一个10g的库,不能使用1

4、1g的continue关键字,更何况我们写脚本,一定要做到的一点是,通用,即在常用的oracle版本(目前一般是指8i-11g,当然我们就是10g-11g)中都能使用。于是我们使用了嵌套循环的办法,即加入一个新的pl/sql语句块,并加入异常处理,即让异常的捕获是在循环之内,还不是循环之外的异常去捕获到它。不过这里就比较简单的一个null了,当然可以使用一些执行纪录等。当业务较为复杂时,可以建立自定义的异常来捕获:declarepiconstantnumber(9,7):=3.1415927;radiusinteger(5);areanumber(14,2);e_userd

5、efinedexceptionexception;pragmaexception_init(e_userdefinedexception,-1401);beginradius:=0;loopradius:=radius+1;beginifradius=4thenraisee_userdefinedexception;elsearea:=pi*power(radius,2);insertintoareasvalues(radius,area);exitwhenarea>100;endif;exceptionwhene_userdefinedexceptionthennull;

6、end;endloop;commit;end;还有一种办法是在pl/sql的声明部分使用procedure,不过原理上面是一样的。我们再说下可以使用goto的方法:declarepiconstantnumber(9,7):=3.1415927;radiusinteger(5);areanumber(14,2);beginradius:=0;loop<>radius:=radius+1;ifradius=4thengotohere;elsearea:=pi*power(radius,2);insertintoareasvalues(radius,area);exi

7、twhenarea>100;endif;endloop;commit;end;貌似goto看起来更简洁,不过我们知道C语言的灵魂是指针,但这也是goto的原理,也是被诟病的地方,即goto破坏程序的可读性跟可维护性。Pl/sql也是是高级编程语言,同样也不推荐使用goto的方法,因为非常容易出错,导致业务逻辑出现问题。应优先使用第一种方法。另外,我们说到11g有了正统的continue,我们看下它的用法,其实跟普通编程语言中的用法完全一样:declaretotalint:=0;beginforiin1..10loo

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。