Oracle存储过程中跳出循环的写法
注:本文来源于: 《 Oracle存储过程中跳出循环的写法 》
Oracle存储过程中跳出循环的写法
记录exit和return的用法
1:exit用来跳出循环
1 loop
2 IF V_KBP IS NULL THEN
3 EXIT;
4 END IF;
5 end loop;
2:return跳出存储过程
1 loop
2 IF V_KBP IS NULL THEN
3 return;
4 END IF;
5 end loop;
3:跳出loop 一次循环
oracle 11g已提供continue;
oracle 10g及以下,使用goto来替代,例如1 SQL> set serveroutput on;
2 SQL> declare
3 2 begin
4 3 for i in 1..10 loop
5 4 if mod(i,2)=0 then
6 5 goto next;
7 6 end if;
8 7 dbms_output.put_line(i);
9 8 <<next>>
10 9 null;
11 10 end loop;
12 11 end;
13 12 /
14 注意:<<next>>标签后的null;语句不可少,因为goto标签后必须紧接着一个执行语句
4:Oracle循环中的EXIT、RETURN、CONTINUE解密
注:本文来源于 《 Oracle循环中的EXIT、RETURN、CONTINUE解密 》
有时候编写Oracle中用游标等信息去循环处理逻辑的时候,对EXIT、RETURN、CONTINUE很容易搞混淆,网上搜了资料也不是很清楚,所以本人自己写了一小段代码测试了这三种用法。案例代码如下:
1 PROCEDURE P_TASK IS
2 BEGIN
3 FOR MY_CU IN (SELECT SPBH, SPMCH FROM FUCM) LOOP
4 FOR MY IN (SELECT SPBH, SPMCH FROM FUCM) LOOP
5 IF MY_CU.SPBH = 'AAA' THEN
6 RETURN;
7 --exit;
8 --continue;
9 ELSIF MY.SPBH = 'BBB' THEN
10 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('123', '123');
11 ELSE
12 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('222', '222');
13 END IF;
14 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('333', '333');
15 END LOOP;
16 END LOOP;
17 INSERT INTO FUCM_JG (SPBH, SPMCH) VALUES ('444', '444');
18 END P_TASK;案例测试得到结果如下(分析的结果中注意本次循环和本循环的区别。本次循环是本循环执行的这次循环):
第一种:使用RETURN的时候,直接跳出存储过程或者函数
第二种:使用EXIT的时候,跳出本循环转而执行本循环的上一级循环的下一次循环。就此案例而言MY_CU.SPBH = 'AAA'为真的时候,直接跳出MY循环转而去执行MY_CU的下一次循环
第三种:使用CONTINUE的时候,本次循环后面的代码部分不再执行,转而执行本循环的下一次循环。就此案例而言MY_CU.SPBH = 'AAA'为真的时候,后面的代码不执行,继续MY的下一次循环
————————————————————————————————————————————————————————————————————————————————————————————————
Oracle存储过程中跳出循环的写法的更多相关文章
- Oracle存储过程中异常Exception的捕捉和处理
Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...
- Oracle存储过程中异步调用的实际操作步骤
本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用 .而有些相关的业务逻辑 ...
- ORACLE存储过程中%TYPE和%ROWTYPE的区别
ORACLE存储过程中%TYPE和%ROWTYPE的区别 在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量 因为 t_emp emp%rowtype ;这个语句的意思是 定义一个 ...
- java 实现往oracle存储过程中传递array数组类型的参数
注:本文来源于 < java 实现往oracle存储过程中传递array数组类型的参数 >最近项目中遇到通过往存储过程传递数组参数的问题, 浪费了N多个小时,终于有点头绪. 具体的代码 ...
- oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题
oracle存储过程中使用execute immediate执行sql报ora-01031权限不足的问题 学习了:http://blog.csdn.net/royzhang7/article/deta ...
- oracle存储过程中%type的含义
转: oracle存储过程中%type的含义 2018-11-07 11:43:56 lizhi_ma 阅读数 1361更多 分类专栏: 数据库 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- 在ORACLE存储过程中创建临时表
在ORACLE存储过程中创建临时表 存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行 --ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截 ...
- ORACLE 存储过程中保存用户自定义异常信息的一种方式
1.创建错误日志表: create table REP_LOGS ( log_s_no NUMBER not null, log_date DATE default sysdate not null, ...
- Oracle存储过程中使用临时表
一.Oracle临时表知识 在Oracle中,临时表分为SESSION.TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION:而 TRANSA ...
随机推荐
- Linux 常用命令(2)
wc命令:用于对文件的行数.单词数和字符数进行统计. wc -w file.txt,显示文件中的单词数,wc -l file.txt,显示文件中的行数,wc -m file.txt,显示文件中的字符数 ...
- ArrayList的底层实现
package zy809; public class myArrayList { /** 存放元素 */ private Object[] data;// 创建一个数组引用. /** 元素的个数 * ...
- ue4 编辑器记录
Matinee 编辑器 菜单:Add New Empty Group->选择要变动的Actor->菜单:Add Actor->菜单:Add Key->变更Actor属性-> ...
- 洛谷P1972 【[SDOI2009]HH的项链】
这道题想了很久,发题解是为了理解的更深刻一点...(管理放我过好嘛qwq) 步入正题:这道题应该是很多做法,我选择的是离线+树状数组. 首先输入数组.用fisrt数组先记录元素最开始出现的位置,对应的 ...
- 用JavaMail通过QQ邮箱来发送邮件(第一篇博客,备忘)
1.先启用QQ邮箱里POP3/STMP服务:生成授权码 2.导入mail.jar包(不要用太古董的技术,你懂得) 3.注意要在代码里加上开启SSL加密的代码 4.直接上代码 import java.u ...
- vue-CLI踩坑记
vue init webpack vue-demo 使用 windows 7 DOS命令行和gitbash都有选择和实际选择结果不一致的问题, DOS命令行只在 Vue build有问题, gitba ...
- git 生成公钥 使用命令行无需输入用户名密码(windows)
之前设置过一次,后来就忘记了,今天改完密码之后发现命令行clone时验证身份失败,重新设置公钥,记录一下 1. 由于之前设置过公钥,所以不用输入用户名密码就可以执行git命令.现在密码变了,取消公钥, ...
- 【Git】Git中的冲突(图形界面,待更新...)
1234567890 <<<<<<< HEAD abcdefghijk ======= b45678910 >>>>>>& ...
- asyncio模块中的Future和Task
task是可以理解为单个coroutine,经过ensure_future方法处理而形成,而众多task所组成的集合经过asyncio.gather处理而形成一个future. 再不精确的粗略的说 ...
- okhttp3与旧版本okhttp的区别分析
https://www.jianshu.com/p/4a8c94b239b4 待总结学习