Oracle 中Return 和exit的区别

来源:互联网 发布:c 并发编程实战 豆瓣 编辑:程序博客网 时间:2024/05/16 10:23

在Oracle存储过程中,使用Return 时,如果执行到Return语句,会跳出整个语句(如果是循环,会跳出整个循环),将不再执行,也就是结束了整个存储过程。

下面就用一个例子来说明一下 ,这个存储过程是根据员工号,查出员工姓名,为了得到直接的效果,我在特定的地方进行了语句的打印,写的有点简单,忘大家谅解:

CREATE OR REPLACE PROCEDURE pro_emp1( v_eno  IN  NUMBER,   v_resultcode        OUT NUMBER,   v_resulterrinfo     OUT VARCHAR2) IS   iv_eno  emp.empno%type ;   iv_name emp.ename%type;   BEGIN     iv_eno:=v_eno;          ---- 把入参的变量赋给定义的变量     v_resultcode :=-1;         BEGIN           select ename into iv_name                       from emp                     where  empno=iv_eno;            dbms_output.put_line('雇员名:'||iv_name);         EXCEPTION             WHEN OTHERS THEN                 v_resultcode:=SQLCODE;                 v_resulterrinfo :='没有想要的雇员名 :' ||SQLERRM;                 RETURN;                  END;                 BEGIN             dbms_output.put_line('执行到大Begin 中的小Begin 中了方法了');      END;           dbms_output.put_line('执行到大Begin的末尾了');END;  


执行这条存储过程,查询不存在的员工,可以看到后面的Beign语句以及打印语句,将不在执行:

SQL> var v_resultcode number;SQL> var v_resultinfo varchar2;SQL> exec pro_emp1 (7789,:v_resultcode,:v_resultinfo); PL/SQL procedure successfully completedv_resultcode---------100v_resultinfo---------没有想要的雇员名 :ORA-01403: 未找到数据  

输入可以查询到的员工号码:

SQL> exec pro_emp1 (7788,:v_resultcode,:v_resultinfo); 雇员名:SCOTT执行到大Begin 中的小Begin 中了方法了执行到大Begin的末尾了 PL/SQL procedure successfully completedv_resultcode----------1v_resultinfo---------

 

 

下面是从网上摘来的,有兴趣的人可以看看:

 create or replace procedure Test5(o_cellphone in varchar2) is    v_cellphone cc_quiz_stat.cellphone %type;    v_name      cc_quiz_stat %rowtype;    v_state     cc_quiz_stat.state %type;    begin    declare    cursor cur_cc is    select * from cc_quiz_stat;    cursor cur_jc(v_n varchar2) is    select state from cc_quiz_stat;    begin    open cur_cc;    loop    fetch cur_cc    into v_name;    exit when cur_cc%notfound;    open cur_jc(o_cellphone);    loop    fetch cur_jc    into v_state;    exit when cur_jc %notfound;    if (o_cellphone = v_name.cellphone) then    return;    else    dbms_output.put_line('手机号' || v_name.cellphone || '省份' ||    v_state);    end if;    end loop;    close cur_jc;    end loop;    close cur_cc;    end;    end Test5;

执行结果:

手机号18900000000省份全国    手机号18900000000省份南京    手机号18900000000省份天津    手机号18900000000省份 上海    手机号18900000000省份北京


 

 create or replace procedure Test5(o_cellphone in varchar2) is    v_cellphone cc_quiz_stat.cellphone %type;    v_name      cc_quiz_stat %rowtype;    v_state     cc_quiz_stat.state %type;    begin    declare    cursor cur_cc is    select * from cc_quiz_stat;    cursor cur_jc(v_n varchar2) is    select state from cc_quiz_stat;    begin    open cur_cc;    loop    fetch cur_cc    into v_name;    exit when cur_cc%notfound;    open cur_jc(o_cellphone);    loop    fetch cur_jc    into v_state;    exit when cur_jc %notfound;    if (o_cellphone = v_name.cellphone) then    exit;    else    dbms_output.put_line('手机号' || v_name.cellphone || '省份' ||    v_state);    end if;    end loop;    close cur_jc;    end loop;    close cur_cc;    end;    end Test5;

执行结果:

    手机号18900000000省份全国    手机号18900000000省份南京    手机号18900000000省份天津    手机号18900000000省份 上海    手机号18900000000省份北京    手机号18900000002省份全国    手机号18900000002省份南京    手机号18900000002省份天津    手机号18900000002省份 上海    手机号18900000002省份北京    手机号18900000003省份全国    手机号18900000003省份南京    手机号18900000003省份天津    手机号18900000003省份 上海    手机号18900000003省份北京    手机号18900000004省份全国    手机号18900000004省份南京    手机号18900000004省份天津    手机号18900000004省份 上海    手机号18900000004省份北京


return 跳出整个循环,本循环后面的不再执行,

exit 跳出本次循环,下次继续执行本次循环


 

 

原创粉丝点击