Oracle 中的GOTO,RETURN,EXIT
Oracle 中的GOTO,RETURN,EXIT
1.GOTO,主要用于跳转,但会打乱我们的程序逻辑,一般不使用,它可以实现RETURN,EXIT的功能
2.RETURN,返回程序末尾,结束程序
3.EXIT,主要用于退出当前循环,相当于java中的break.
4.要实现java中continue的功能可以使用自定义异常的方式
它们之间的比较
- --这里的GOTO相当于下面的EXIT用法
- BEGIN
- FOR i IN 1..2 LOOP
- IF i=2 THEN
- GOTO label;
- END IF;
- dbms_output.put_line('i='||i);
- END LOOP;
- <<label>>
- dbms_output.put_line('the last...');
- END;
- /
- i=1
- the last...
- PL/SQL procedure successfully completed.
- BEGIN
- FOR i IN 1..2 LOOP
- IF i=2 THEN
- --GOTO label;
- EXIT;
- END IF;
- dbms_output.put_line('i='||i);
- END LOOP;
- <<label>>
- dbms_output.put_line('the last...');
- END;
- /
- i=1
- the last...
- PL/SQL procedure successfully completed.
- BEGIN
- FOR i IN 1..2 LOOP
- IF i=2 THEN
- --GOTO label;
- --EXIT;
- RETURN;
- END IF;
- dbms_output.put_line('i='||i);
- END LOOP;
- <<label>>
- dbms_output.put_line('the last...');
- END;
- /
- i=1
- PL/SQL procedure successfully completed.
- --下面相当于上面的RETURN
- BEGIN
- FOR i IN 1..2 LOOP
- IF i=2 THEN
- GOTO label;
- --EXIT;
- --RETURN;
- END IF;
- dbms_output.put_line('i='||i);
- END LOOP;
- dbms_output.put_line('the last...');
- <<label>>
- NULL;--这个NULL不能省略,<<label>>不能在END;END LOOP;等之前
- END;
- /
- i=1
- PL/SQL procedure successfully completed.
自定义异常的方式实现continue的功能
- DECLARE
- e_My_Exception EXCEPTION;
- --PRAGMA EXCEPTION_INIT (e_My_Exception, -1401);
- BEGIN
- FOR i IN 1..2 LOOP
- BEGIN
- IF i=2 THEN
- RAISE e_My_Exception;
- END IF;
- dbms_output.put_line('i='||i);
- EXCEPTION
- WHEN e_My_Exception THEN
- NULL;
- END;
- END LOOP;
- dbms_output.put_line('the last...');
- END;
- /
评论暂时关闭