在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. JDBC数据库连接简介(一)

    jdbc的由来 odbc(open database connection) 最初各个数据库比如mysql和oracle等,虽然都支持sql,但是他们的连接方式是不一样的,需要按照相应的api来编写不 ...

  2. 带你深入理解STL之空间配置器(思维导图+源码)

    前不久把STL细看了一遍,由于看得太"认真",忘了做笔记,归纳和总结这步漏掉了.于是为了加深印象,打算重看一遍,并记录下来里面的一些实现细节.方便以后能较好的复习它. 以前在项目中 ...

  3. Android之使用参数改变ProgressDialog的位置、大小、背景透明度、屏幕透明度

    废话不多说,这个改变ProgressDialog的一些配置属性和前面我讲的AlertDialog的设置参数方法一模一样,这里就为了更直观,直接贴实现代码吧: ProgressDialog mProgr ...

  4. VMware虚拟化解决方案】如何选择虚拟化产品

    http://wangchunhai.blog.51cto.com/225186/1425557/ 拟化.云计算.大数据.智慧城市,是近期以及将来一段时间的热点.现在虚拟化产品很多,做虚拟化的公司也很 ...

  5. 排列熵算法简介及c#实现

    一.   排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...

  6. 关于bootstrap-fileinput

    最近搞了一个很简单的项目,里面需要文件上传.当然文件上传也是很简单的,不过做出成品之后发现,卧槽,火狐和谷歌两个浏览器显示的内容不一致. 如下图,左边的是谷歌显示,右边是火狐显示. 其实,作为一个后台 ...

  7. [Mac] mac linux 多线程下载利器 axel

    ​> 之前做过一些文件下载的统计,发现谷歌浏览器chrome和火狐firefox, 一般都是单线程的下载文件,360浏览器却是多线程的下载. 现在切换到了mac上,发现没有360哪个浏览器,就像 ...

  8. RH阴性血妇女怀孕注意事项

     RH阴性血的妇女怀孕注意事项,本文主要讲解RH阴性血抗体效价检测. 第一.孕前准备:Rh阴性的妇女怀孕前,需要到血液中心或指定医院作ABO和Rh血型鉴定,并且做一次孕前血液免疫学产前检查(血型抗体检 ...

  9. 《C语言点滴》书评

    说起C语言方面的书,你最先想到的是哪一本?不论图书本身是好是坏,反正我想到的是谭浩强的<C程序设计>--它已然是一部"圣经"了.那么,为什么赵岩老师还要写一本<C ...

  10. TCP/IP入门(1) --链路层

    /** 本博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP体系结 ...