1,第几种使用For 循环

for循环是比较简单实用的方法。

首先,它会自动open和close游标。解决了你忘记打开或关闭游标的烦恼。

其次,自动声明一个记录类型及定义该类型的变量,并自动fetch数据到这个变量。

注意C_ROW 这个变量无需要在循环外进行声明,无需为其指定数据类型。它是一个记录类型,具体的结构是由游标决定的。

这个变量的作用域仅仅是在循环体内。

较后,与该游标关联的所有记录都已经被取回后,循环无条件结束,不必判定游标的%NOTFOUND属性为TRUE。

for循环是用来循环游标的较好方法。高效,简洁,安全。

CREATE OR REPLACE PROCEDURE PRC_LJ IS

CURSOR C_EMP IS --声明显式游标

SELECT EMPNO,ENAME FROM EMP;

C_ROW C_EMP%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录

BEGIN

--For 循环

FORC_ROW IN C_EMP LOOP

DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '--' || C_ROW.ENAME);

ENDLOOP;

--Fetch 循环

OPEN C_EMP;--必须要明确的打开和关闭游标

LOOP

FETCH C_EMP

INTO C_ROW;

EXIT WHEN C_EMP%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '++' || C_ROW.ENAME);

ENDLOOP;

CLOSE C_EMP;

--While 循环

OPEN C_EMP;--必须要明确的打开和关闭游标

FETCH C_EMP INTO C_ROW;

WHILE C_EMP%FOUND LOOP

DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '**' || C_ROW.ENAME);

FETCH C_EMP INTO C_ROW;

END LOOP;

CLOSE C_EMP;

END PRC_LJ;

2,第二种使用Fetch循环

注意,exit when语句一定要紧跟在fetch之后,避免多余的数据处理。

处理逻辑需要跟在exit when之后。

循环结束后要记得关闭游标。

CREATE OR REPLACE PROCEDURE PRC_LJ IS

CURSOR C_EMP IS --声明显式游标

SELECT EMPNO,ENAME FROM EMP;

C_ROW C_EMP%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录

BEGIN

--Fetch 循环

OPEN C_EMP;--必须要明确的打开和关闭游标

LOOP

FETCH C_EMP

INTO C_ROW;

EXIT WHEN C_EMP%NOTFOUND;

DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '++' || C_ROW.ENAME);

ENDLOOP;

CLOSE C_EMP;

END PRC_LJ;

3,第三种使用While循环

使用while 循环时,需要在循环之前进行一次fetch动作,游标的属性才会起作用。

而且数据处理动作必须放在循环体内的fetch方法之前,循环体内的fetch方法要放在较后,否则就会多处理一次。

CREATE OR REPLACE PROCEDURE PRC_LJ IS

CURSOR C_EMP IS --声明显式游标

SELECT EMPNO,ENAME FROM EMP;

C_ROW C_EMP%ROWTYPE; --定义游标变量,该变量的类型为基于游标C_EMP的记录

BEGIN

--While 循环

OPEN C_EMP;--必须要明确的打开和关闭游标

FETCH C_EMP INTO C_ROW;

WHILE C_EMP%FOUND LOOP

DBMS_OUTPUT.PUT_LINE(C_ROW.EMPNO || '**' || C_ROW.ENAME);

FETCH C_EMP INTO C_ROW;

END LOOP;

CLOSE C_EMP;

END PRC_LJ;

4,存储过程选用FOR循环遍历游标,并做成定时job调用执行

--存储过程如下:

createor replace procedure BIS_QUIC_REPORT is

--声明游标

cursorcur_proids is select t.bis_project_id from bis_project t;

--定义游标变量

cur_pidscur_proids%rowtype;

v_monthvarchar2(2);

v_yearvarchar2(4);

begin

/**forjack.liu on 20150331*/

select to_char(sysdate,'yyyy') into v_yearfrom dual;

select case whensubstr(to_char(sysdate,'mm'),1,1)='0' then

substr(to_char(sysdate,'mm'),2,1)else to_char(sysdate,'mm') end into v_month

from dual;

--开始遍历

for cur_pids in cur_proids loop

insertinto

zzz_test(id,name,create_time)values(v_month,'PKP_BIS_REPORT.buildQuickReport:'||cur_pids.bis_project_id,sysdate);

commit;

PKP_BIS_REPORT.buildQuickReport(cur_pids.bis_project_id,v_year,v_month,null,null,null,null);

end loop;

endBIS_QUIC_REPORT;

--job任务如下:

begin

sys.dbms_scheduler.create_job(job_name => 'JACK.BUILDQUICKREPORT',

job_type => 'STORED_PROCEDURE',

job_action => 'BIS_QUIC_REPORT',

start_date => to_date('01-04-2015 03:00:00','dd-mm-yyyy

hh24:mi:ss'),

repeat_interval => 'Freq=Daily',

end_date => to_date(null),

job_class => 'DBMS_JOB$',

enabled => true,

auto_drop => false,

comments => '');

end;

/

oracle往游标中存数据,Oracle数据库:ORACLE11G在存储过程里面遍历游标相关推荐

  1. oracle使用游标批量删除数据,oracle 游标批量处理数据

    declare --开始时间 v_date_start date:= to_date('2015-05-28 00:00:00','yyyy-mm-dd hh24:mi:ss'); --结束时间 v_ ...

  2. Oracle10表数据编辑器,Oracle ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析 (Windows CMD 方式)...

    Oracle ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析 (Windows CMD 方式) 在实际生产环境中,常会碰到将一些如通过通讯接口传过来的数据(文本文件 txt) ...

  3. ORACLE向表中添加数据

    ORACLE向表中添加数据 1.直接插入数据 insert into table_name values('col_text','col_text1'); 顺序一致,给表中的所有列添加一条数据时:(c ...

  4. 在PB中存图片入数据库及显示图片

    在PB中存图片入数据库及显示图片 摘自:http://www.xicc.cn/User0/109/Show.asp?/_articleid/549.html 1.选择图片 string ls_path ...

  5. 25 Redis的缓存中的数据和数据库中的不一致问题

    25 Redis的缓存中的数据和数据库中的不一致问题 前言 一.缓存和数据库的数据不一致是如何发生的? 二.解决Redis 和数据库数据不一致的方法 总结 前言 Redis 缓存经常会遇到有 4 个方 ...

  6. 使用poi读取Excel中的数据到数据库

    大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 目录 大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 1.poi简单介绍 2.poi操作excel 3.代码部分(可 ...

  7. 将excel中是数据导入数据库

    2019独角兽企业重金招聘Python工程师标准>>> 将excel中是数据导入数据库 1.利用excel生成sql语句: 列如: 1).insert: =CONCATENATE(& ...

  8. 将excel中的数据导入数据库

    下图为java导入数据库中表的结构,其中id为自增,导入excel时excel中的数据不需要写id列,数据库会自动生成只需要写后面相对应的数据. 下表为excel导入数据库时的结构,列必须与数据库相对 ...

  9. POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

    POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...

最新文章

  1. 【信息安全】ECC加密算法入门介绍
  2. RecyclerView的使用和样式
  3. 基于Xml 的IOC 容器-向容器注册
  4. Linux中的configure、pkg-config、pkg_config_path
  5. 聚焦BCS|吴云坤产业峰会演讲:用内生安全框架提升网络安全产值
  6. PostMan居然要被干掉了!IDEA这款插件太实用了…
  7. 制作 Pidgin QQ 表情包
  8. 网吧软件经典大集合.各种网管工具
  9. matlab 并联机械臂_MATLAB机械臂的两种路径规划
  10. java redis教程视频_2020年Java视频教程-Redis全集
  11. 成都单片机开发-STC15F2K60S2-LQFP44引脚含义以及1号引脚实物位置
  12. 如何将mac中文输入法(搜狗等)设置成默认输入法
  13. TV端影视APP开发搭建需要注意哪些问题?
  14. Java面试基础(二)
  15. awk内置命令RS,ORS,FS,OFS的使用
  16. springboot+java农家乐系统-住宿-美食-活动vue
  17. Ludwig Otto Hölder
  18. FIR.im Weekly - 这是多产的一周
  19. 广工计算机学院男女比例,广东高校新生数据大揭秘,哪所大学男女比例最大
  20. A. Tom Riddle's Diary

热门文章

  1. Go的闭包看你犯错,Rust却默默帮你排坑
  2. 曾被“劝退”的 C++ 20 正式发布!
  3. 马云:今后数字技术是让人类能够更好的生存下去
  4. 一文搞懂 Spring JPA
  5. 苹果或在 WWDC 宣布放弃英特尔转向自研 5nm ARM 芯片,这次时机成熟了?
  6. 标贝科技推出情感合成 TTS,让语音交互更有温度!
  7. 大学生程序员被勒索比特币后,绝地反击! | 原力计划
  8. 亲测!这款耳机性价比堪比 AirPods
  9. 雷军:小米有机会重返世界前三;苹果为 Siri 泄露隐私事件致歉;Apache Tomcat 9.0.24 发布 | 极客头条...
  10. “遗留代码是传奇!”