Maison > base de données > tutoriel mysql > Oracle 中Return 和exit的区别

Oracle 中Return 和exit的区别

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2016-06-07 15:20:31
original
1144 Les gens l'ont consulté

在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;  
Copier après la connexion


执行这条存储过程,查询不存在的员工,可以看到后面的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: 未找到数据  	
Copier après la connexion

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

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

 

 

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

 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;

Copier après la connexion

执行结果:

手机号18900000000省份全国

    手机号18900000000省份南京

    手机号18900000000省份天津

    手机号18900000000省份 上海

    手机号18900000000省份北京

Copier après la connexion


 

 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;

Copier après la connexion

执行结果:

    手机号18900000000省份全国

    手机号18900000000省份南京

    手机号18900000000省份天津

    手机号18900000000省份 上海

    手机号18900000000省份北京

    手机号18900000002省份全国

    手机号18900000002省份南京

    手机号18900000002省份天津

    手机号18900000002省份 上海

    手机号18900000002省份北京

    手机号18900000003省份全国

    手机号18900000003省份南京

    手机号18900000003省份天津

    手机号18900000003省份 上海

    手机号18900000003省份北京

    手机号18900000004省份全国

    手机号18900000004省份南京

    手机号18900000004省份天津

    手机号18900000004省份 上海

    手机号18900000004省份北京

Copier après la connexion


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

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


 

 

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal