Oracle 中Return 和exit的区别
在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的区别的更多相关文章
- oracle中函数和存储过程的区别和联系【转载竹沥半夏】
oracle中函数和存储过程的区别和联系[转载竹沥半夏] 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己 ...
- oracle中函数和存储过程的区别和联系
oracle中函数和存储过程的区别和联系 在oracle中,函数和存储过程是经常使用到的,他们的语法中有很多相似的地方,但也有自己的特点.刚学完函数和存储过程,下面来和大家分享一下自己总结的关于函数和 ...
- oracle中rownum和rowid的区别
rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...
- oracle中rownum和rowid的区别【转】
rownum和rowid的区别总括: rownum和rowid都是伪列,但是两者的根本是不同的. rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownu ...
- 循环结构中break、continue、return和exit的区别
1. break break语句的使用场合主要是switch语句和循环结构.在循环结构中使用break语句,如果执行了break语句,那么就退出循环,接着执行循环结构下面的第一条语句.如果在多重嵌套循 ...
- break,continue,return和exit的区别
1.break break语句的使用场合主要是switch语句和循环结构. 在循环结构中使用break语句,就退出循环,接着执行循环结构下面的第一条语句. 如果在多重嵌套循环中使用break语句,当执 ...
- c语言return与exit的区别
2013-09-0918:54:33 exit函数在头文件stdlib.h中,函数原型: void exit(int status); exit(0) 正常运行程序并退出程序. exit(1) 非正常 ...
- (转)ORACLE中SID和SERVICE_NAME的区别
背景:之前一直分不清plsql和程序中配置文件url之间的连接,想当然的认为service_name 和jdburl后面的实例相对应,直到出错的这一天,通过这篇博客,彻底扫除了盲点. 1 问题 1.1 ...
- 转://Oracle中User和Schema的区别和联系
今天在阅读Oracle官方文档的时候,读到schema的基本概念,这就让我产生了一个疑问:user和schema两者之间到底有什么区别?为了更深层次的理解二者之间的区别和联系,以下是官方文档中关于us ...
随机推荐
- Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件
CSV,逗号分开的文件,如果能快速的读取这些文件中的数据,无疑会帮助我们解决很多问题. 1. 只有数据的CSV文件,CSV file that includes only numbers. As an ...
- 【Netty源码分析】发送数据过程
前面两篇博客[Netty源码分析]Netty服务端bind端口过程和[Netty源码分析]客户端connect服务端过程中我们分别介绍了服务端绑定端口和客户端连接到服务端的过程,接下来我们分析一下数据 ...
- SSH深度历险(四) Maven初步学习
这几天接触这个词,很多遍了,只是浅显的体会到它在GXPT中的好处,功能之强大,又通过网络查询了资料进一步的认识学习了,和大家分享. Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理 ...
- Intent的Component,Action和Category属性详解-android学习之旅(五十)
Component属性 代码示例 public class MainActivity extends Activity{ @Override protected void onCreate(Bundl ...
- Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射 ...
- xpath技术解析xml以及案例模拟用户登录效果
问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! xpath就在此情况下产生了--主要是用于快速获取所需的[节点对象]. 在dom4j中如何使用xPath技术 1) ...
- 分布式进阶(七)Ubuntu下如何进入 Docker 容器
如何进入 Docker 容器 英文原文:How to enter a Docker container 在这篇文章里,我将讨论四种连接Docker容器并与其进行交互的方法.例子中所有的代码都可以在Gi ...
- 如何利用BI搭建电商数据分析平台
某电商是某大型服装集团下的重要销售平台.2015 年,该集团品牌价值达数百亿元,产品质量.市场占有率.出口创汇.销售收入连年居全国绒纺行业第一,在中国有终端店3000多家,零售额80 亿.其羊绒制品年 ...
- iOS中 UITableViewRowAction tableViewcell编辑状态下的功能 UI技术分享
* tableView:editActionsForRowAtIndexPath: // 设置滑动删除时显示多个按钮 * UITableViewRowAction // 通过此类创建按钮 * 1. 我 ...
- C++ Primer 有感(面向对象编程)
1.除了构造函数之外,任意非static成员函数都可以是虚函数.保留字virtual只在类内部的成员函数声明处出现,不能用在类定义体外部出现的函数定义上. 2.派生类只能通过派生类对象访问其基类的pr ...