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 ...
随机推荐
- pyqt5-控件是否可用
setEnabled(bool) 设置控件是否可用 True 可用 isEnabled() 获取控件是否可用 s=button.isEnabled()
- 2017CCPC秦皇岛 M题Safest Buildings&&ZOJ3993【复杂模拟】
题意: 给出两个半径R,r,R表示第一次的大圈半径,r表示第二次的小圈半径.第一次大圈的圆心位于(0,0),第二次小圈的圆心未知,但在大圈内,给你一个n,然后给出n个屋子的位置,问这些屋子中,第二次在 ...
- IntelliJ IDEA执行maven 跳过test
- 1173 - The Vindictive Coach
题目大意:n个不同身高的队员和教练的按照身高排成波浪形……每个人按照身高由低到高编号,其中第m个是教练,他必须在第一个,如果条件允许,排第二的要比m低,如果条件不允许,即其余人都比教练高,则要让差距尽 ...
- 最近邻算法(KNN)
最近邻算法: 1.什么是最近邻是什么? kNN算法全程是k-最近邻算法(k-Nearest Neighbor) kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数数以一个类型别 ...
- qunee 开发清新、高效的拓扑图组件 http://www.qunee.com/
qunee 开发清新.高效的拓扑图组件 http://www.qunee.com/ RoadFlow: http://www.cqroad.cn/ 村暖花开
- 《Windows核心编程》读书笔记 上
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...
- windows命令行获取时间
在写Windows批处理脚本时,常常需要获取系统日期.时间戳记,用作文件名.文件夹名.log等等. 本文介绍了如何获取自订的系统日期.时间戳记. 首先,在Windows中,系统日期由以下参数获得: % ...
- C# List 作为参数传递的值变化
一.示例演示 namespace TestConsole { class Program { static void Main(string[] args) { Console.WriteLine(& ...
- 【转】细说new与malloc的10点区别
1.申请的内存所在位置 new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存.自由存储区是C++基于new操作符的一个抽象概念,凡是通过new ...