在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. Web开发学习之路--Eclipse+Tomcat+mysql之初体验

    学习了一段时间android,正好要用到android和服务器之间的交互,既然要学习android,那么就涉猎下服务器端的开发了,以前学过php,用thinkphp很快可以搭建起来,但是android ...

  2. [Python]程序性能分析

    有些脚本发现比预期要慢的多,就需要找到瓶颈,然后做相应的优化,参考A guide to analyzing Python performance,也可以说是翻译. 指标 运行时间 时间瓶颈 内存使用 ...

  3. 卸载linux后出现grub rescue怎么办?

    原文转自:http://zhidao.baidu.com/link?url=9e2mOttgV0IJDMml58SFbV-7XOvVzp2jR5l1n3ltFOzX1XAcp5-t-QQPc-Nozy ...

  4. UNIX网络编程——fcntl函数

    fcntl函数提供了与网络编程相关的如下特性: 非阻塞式I/O.  通过使用F_SETFL命令设置O_NONBLOCK文件状态标志,我们可以把一个套接字设置为非阻塞型. 信号驱动式I/O. 通过使用F ...

  5. UNIX网络编程——内网与外网间通信

    QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!!! 一.登 ...

  6. UNIX环境高级编程——线程和信号

    每个线程都有自己的信号屏蔽字,但是信号的处理是进程中所有线程共享的.这意味着尽管单个线程可以阻止某些信号,但当线程修改了与某个信号相关的处理行为以后,所有的线程都必须共享这个处理行为的改变.这样如果一 ...

  7. Andriod的国际化-android学习之旅(五十八)

    android资源国际化

  8. Zeroc Ice原理介绍

    Ice介绍         Ice(Internet Communications Engine)是ZeroC公司的杰作,继承了CORBA的血统,是新一代的面向对象的分布式系统中间件.Ice是RPC通 ...

  9. Mybatis执行CachingExecutor(六)

    前面几篇博客我们介绍了Excutor及抽象类BaseExecutor和实现类SimpleExecutor.BatchExecutor和ReuseExecutor: 博客列表: Mybatis执行Exe ...

  10. USB OTG原理+ ID 检测原理

    OTG 检测的原理是: USB OTG标准在完全兼容USB2.0标准的基础上,增添了电源管理(节省功耗)功能,它允许设备既可作为主机,也可作为外设操作(两用OTG).USB OTG技术可实现没有主机时 ...