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 ...
随机推荐
- java虚拟机 jvm 局部变量表实战
java局部变量表是栈帧重要组中部分之一.他主要保存函数的参数以及局部的变量信息.局部变量表中的变量作用域是当前调用的函数.函数调用结束后,随着函数栈帧的销毁.局部变量表也会随之销毁,释放空间. 由于 ...
- Dynamics CRM 将实体从高级查找列表中移除不可见
有时我们不需要将某个实体显示给一般用户比如配置实体,但是这种类型的实体有时候又需要给一般用户读权限ODATA的时候得能读,站点地图上的隐藏比较容易用工具配置下权限即可.其实做到这步一般就可以了但有的客 ...
- (NO.00005)iOS实现炸弹人游戏(六):游戏数据的初始化(三)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 现在我们来看看实际初始化地图的randomCreateMap方法 ...
- centos7安装jdk,tomcat,msyql(MariaDB)
操作系统版本 CentOS Linux release 7.2.1511 (Core) 安装jdk 下载jdk-8u66-linux-x64.rpm上传到linux上 先改用户权限 然后 rpm -i ...
- 《C语言点滴》书评
说起C语言方面的书,你最先想到的是哪一本?不论图书本身是好是坏,反正我想到的是谭浩强的<C程序设计>--它已然是一部"圣经"了.那么,为什么赵岩老师还要写一本<C ...
- mysql进阶(二十二)MySQL错误之Incorrect string value: '\xE7\x81\xAB\xE7\x8B\x90...中文字符输入错误
MySQL错误之Incorrect string value: '\xE7\x81\xAB\xE7\x8B\x90...' for column 'tout' at row 1中文字符输入错误 在实验 ...
- Django练习——博客系统小试
在上一篇博客Todolist的基础上(http://blog.csdn.net/hcx25909/article/details/24251427),本周继续进行实践,这次我要搭建一个简单的博客系统. ...
- Java图片加文字水印
Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...
- 内连接、左外连接、右外连接、全外连接、交叉连接(CROSS JOIN)-----小知识解决大数据攻略
早就听说了内连接与外连接,以前视图中使用过.这次自考也学习了,只是简单理解,现在深入探究学习(由于上篇博客的出现)与实践: 概念 关键字: 左右连接 数据表的连接有: 1.内连接(自然连接): 只有两 ...
- python的map
map(function, iterable, ...) 将function放到迭代的每个元素执行,结果为list. 引自>:http://my.oschina.net/zyzzy/blog/1 ...