mysql in和exit的区别_Oracle 中Return 和exit的区别

在Oracle存储过程中, 使用Return 时 ,如果执行到Return语句,会跳出整个语句(如果是循环,会跳出整个循环),将不再执行, 也就是结束了整个存储过程。 下面就用一个例子来说明一下 ,这个存储过程是根据员工号,查出员工姓名,为了得到直接的效果,我在

在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 completed

v_resultcode

---------

100

v_resultinfo

---------

没有想要的雇员名 :ORA-01403: 未找到数据

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

SQL> exec pro_emp1 (7788,:v_resultcode,:v_resultinfo);

雇员名:SCOTT

执行到大Begin 中的小Begin 中了方法了

执行到大Begin的末尾了

PL/SQL procedure successfully completed

v_resultcode

---------

-1

v_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 跳出本次循环,下次继续执行本次循环

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值