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

Oracle 中Return 和exit的区别的更多相关文章

  1. oracle中函数和存储过程的区别和联系【转载竹沥半夏】

    oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...

  2. oracle中函数和存储过程的区别和联系

    oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...

  3. oracle中rownum和rowid的区别

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  4. oracle中rownum和rowid的区别【转】

    rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...

  5. 循环结构中break、continue、return和exit的区别

    1. break break语句的使用场合主要是switch语句和循环结构.在循环结构中使用break语句,如果执行了break语句,那么就退出循环,接着执行循环结构下面的第一条语句.如果在多重嵌套循 ...

  6. break,continue,return和exit的区别

    1.break break语句的使用场合主要是switch语句和循环结构. 在循环结构中使用break语句,就退出循环,接着执行循环结构下面的第一条语句. 如果在多重嵌套循环中使用break语句,当执 ...

  7. c语言return与exit的区别

    2013-09-0918:54:33 exit函数在头文件stdlib.h中,函数原型: void exit(int status); exit(0) 正常运行程序并退出程序. exit(1) 非正常 ...

  8. (转)ORACLE中SID和SERVICE_NAME的区别

    背景:之前一直分不清plsql和程序中配置文件url之间的连接,想当然的认为service_name 和jdburl后面的实例相对应,直到出错的这一天,通过这篇博客,彻底扫除了盲点. 1 问题 1.1 ...

  9. 转://Oracle中User和Schema的区别和联系

    今天在阅读Oracle官方文档的时候,读到schema的基本概念,这就让我产生了一个疑问:user和schema两者之间到底有什么区别?为了更深层次的理解二者之间的区别和联系,以下是官方文档中关于us ...

随机推荐

  1. socket系列之客户端socket——Socket类

    假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...

  2. 高仿QQ头像截取

    花费了半天时间,把 仿QQ头像截取的方法整理了下,并制作了一个demo以供大家参考,基本上实现了qq中我的资料界面上(包括背景透明化,上滑标题栏显示,下拉隐藏等)的大致效果,先上图看效果吧: 支持的功 ...

  3. 【Unity技巧】四元数(Quaternion)和旋转

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

  4. 01 Android修改新建虚拟机存放的位置

    创建的Android虚拟机(即AVD)的位置是在C盘的当前用户文件夹下(C:\Users\用户名\.android\avd) 这一默认设置不怎么好,特别是C盘空间吃紧的话. 这里提供2个解决办法(分2 ...

  5. 高斯函数 --> 高斯分布(正态分布)

    具有如下形式的函数就是高斯函数. 其中a,b,c都是实数常数,a大于0 .由于在博客中写数学公式比较麻烦,还是直接放照片吧. 字写的很难看,不过应该可以看清楚.:(

  6. MVPHelper更新日志 --- 新增常规分包模式

    MVPHelper是一款可以自动生成MVP接口以及实现类的android studio插件,彻底解放双手! MVPHelper更新版本啦. 由于之前只支持contract模式,不是很符合大众口味 所以 ...

  7. UNIX网络编程——TCP输出,UDP输出

    TCP输出 每一个TCP套接字有一个发送缓冲区,我们可以使用SO_SNDBUF套接字选项来更改该缓冲区的大小.当某个应用进程调用write时,内核从该应用进程的缓冲区中复制所有数据到(或是应用程序的缓 ...

  8. Chapter 3 Protecting the Data(4):创建和使用应用程序角色

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/39927713,专题目录:http://blog.csdn.net/dba_huangzj ...

  9. 95%的bug是由程序员造成的

    原文作者:Jeff Atwood 作者在Twitter上发的一条短讯: "在怨天尤人之前,我们应该先自我反省.努力把自身的问题解决了." 12:22 PM –2012-5-30 你 ...

  10. The Singularity is Near---预测人工智能,科技走向的神书---奇点临近

    比尔盖茨评价本文作者: 雷·库兹韦尔是我所知道的预测人工智能未来最权威的人.他的这本耐人寻味的书预测未来信息技术得到空前发展,将促使人类超越自身的生物极限--以我们无法想象的方式超越我们的生命. 中文 ...