oracleストレージ中のreturnとexitの違いの概要とテスト

2673 ワード

 
  
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省北京
携帯電話番号18900000000 2省全国
携帯電話番号18900000000 2省南京
携帯電話番号18900000000 2省天津
携帯電話番号18900000000 2省上海
携帯電話番号18900000000 2省北京
携帯電話番号18900000000 3省全国
携帯電話番号18900000000 3省南京
携帯電話番号18900000000 3省天津
携帯電話番号18900000000 3省上海
携帯電話番号18900000000 3省北京
携帯電話番号18900000000 4省全国
携帯電話番号18900000000 4省南京
携帯電話番号18900000000 4省天津
携帯電話番号18900000000 4省上海
携帯電話番号18900000000 4省北京
returnはループ全体から飛び出し、このループの後には実行されません.
exitは今回のループから飛び出し、次回はこのループを実行します