Oracle 中Return 和exit的區別

2021-06-15 09:51:59 字數 4157 閱讀 2601

在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

---------

100v_resultinfo

---------

沒有想要的雇員名 :ora-01403: 未找到資料

輸入可以查詢到的員工號碼:

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

雇員名:scott

執行到大begin 中的小begin 中了方法了

執行到大begin的末尾了

pl/sql procedure successfully completed

v_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 跳出本次迴圈,下次繼續執行本次迴圈

oracle儲存過程中return和exit區別

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....

oracle儲存過程中return和exit區別

oracle儲存過程中return和exit區別 create or replace procedure test5 o cellphone in varchar2 is v cellphone cc quiz stat.cellphone type v name cc quiz stat rowt...

PHP返回介面資料使用return還是echo

問題 yii2框架,前後端分離的,前端呼叫後台介面,後台使用echo返回結果,前端報錯。解決 使用return返回資料,或者echo之後不加die exit等這類結束語句。前端可以接收到傳遞的資料,不報錯。return 111 正常 網上找到的兩句有關return和echo的解釋 return 作為...