(转)Oraclepl/sql中实现continue的方法
3611人阅读?评论(0)?CREATE?TABLE?AREAS
(
??RADIUS??NUMBER(5),
??AREA????NUMBER(14,2)
);
方法一:使用 goto
DECLARE
???pi???CONSTANT?NUMBER?(9,?7)??:=?3.1415927;
???radius????????INTEGER?(5);
???area??????????NUMBER?(14,?2);
BEGIN
???radius?:=?0;
???LOOP
??????<<here>>
??????radius?:=?radius?+?1;
??????IF?radius?=?4
??????THEN
?????????GOTO?here;
??????ELSE
?????????area?:=?pi?*?POWER?(radius,?2);
?????????INSERT?INTO?areas
??????????????VALUES?(radius,?area);
?????????EXIT?WHEN?area?>?100;
??????END?IF;
???END?LOOP;
???COMMIT;
EXCEPTION
???WHEN?OTHERS
???THEN
??????ROLLBACK;
??????RAISE;
END;?-- 方法二:使用 exception
--?利用系统?exception
DECLARE
???pi?????CONSTANT?NUMBER?(9,?7)??:=?3.1415927;
???radius??????????INTEGER?(5);
???area????????????NUMBER?(14,?2);
???some_variable???NUMBER?(14,?2);
BEGIN
???radius?:=?0;
???LOOP
??????BEGIN
?????????radius?:=?radius?+?1;
?????????some_variable?:=?1?/?(radius?-?4);
?????????area?:=?pi?*?POWER?(radius,?2);
?????????INSERT?INTO?areas
??????????????VALUES?(radius,?area);
?????????EXIT?WHEN?area?>?100;
??????EXCEPTION
?????????WHEN?ZERO_DIVIDE
?????????THEN
????????????NULL;
??????END;
???END?LOOP;
???COMMIT;
EXCEPTION
???WHEN?OTHERS
???THEN
??????ROLLBACK;
??????RAISE;
END;?
--?自定义?exception
DECLARE
???pi??????????????CONSTANT?NUMBER?(9,?7)??:=?3.1415927;
???radius???????????????????INTEGER?(5);
???area?????????????????????NUMBER?(14,?2);
???e_userdefinedexception???EXCEPTION;
???PRAGMA?EXCEPTION_INIT?(e_userdefinedexception,?-1401);
BEGIN
???radius?:=?0;
???LOOP
??????radius?:=?radius?+?1;
??????BEGIN
?????????IF?radius?=?4
?????????THEN
????????????RAISE?e_userdefinedexception;
?????????ELSE
????????????area?:=?pi?*?POWER?(radius,?2);
????????????INSERT?INTO?areas
?????????????????VALUES?(radius,?area);
????????????EXIT?WHEN?area?>?100;
?????????END?IF;
??????EXCEPTION
?????????WHEN?e_userdefinedexception
?????????THEN
????????????NULL;
??????END;
???END?LOOP;
???COMMIT;
EXCEPTION
???WHEN?OTHERS
???THEN
??????ROLLBACK;
??????RAISE;
END;转自:http://www.itpub.net/thread-1118901-1-1.html如果CONTINUE只有一两处,而且可以轻易变成IF..ELSE.., 那么就用IF ELSE, 这也是TOM推荐的方法。