oracle往游标中存数据,Oracle数据库:ORACLE11G在存储过程里面遍历游标
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在存储过程里面遍历游标相关推荐
- oracle使用游标批量删除数据,oracle 游标批量处理数据
declare --开始时间 v_date_start date:= to_date('2015-05-28 00:00:00','yyyy-mm-dd hh24:mi:ss'); --结束时间 v_ ...
- Oracle10表数据编辑器,Oracle ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析 (Windows CMD 方式)...
Oracle ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析 (Windows CMD 方式) 在实际生产环境中,常会碰到将一些如通过通讯接口传过来的数据(文本文件 txt) ...
- ORACLE向表中添加数据
ORACLE向表中添加数据 1.直接插入数据 insert into table_name values('col_text','col_text1'); 顺序一致,给表中的所有列添加一条数据时:(c ...
- 在PB中存图片入数据库及显示图片
在PB中存图片入数据库及显示图片 摘自:http://www.xicc.cn/User0/109/Show.asp?/_articleid/549.html 1.选择图片 string ls_path ...
- 25 Redis的缓存中的数据和数据库中的不一致问题
25 Redis的缓存中的数据和数据库中的不一致问题 前言 一.缓存和数据库的数据不一致是如何发生的? 二.解决Redis 和数据库数据不一致的方法 总结 前言 Redis 缓存经常会遇到有 4 个方 ...
- 使用poi读取Excel中的数据到数据库
大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 目录 大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 1.poi简单介绍 2.poi操作excel 3.代码部分(可 ...
- 将excel中是数据导入数据库
2019独角兽企业重金招聘Python工程师标准>>> 将excel中是数据导入数据库 1.利用excel生成sql语句: 列如: 1).insert: =CONCATENATE(& ...
- 将excel中的数据导入数据库
下图为java导入数据库中表的结构,其中id为自增,导入excel时excel中的数据不需要写id列,数据库会自动生成只需要写后面相对应的数据. 下表为excel导入数据库时的结构,列必须与数据库相对 ...
- POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表
POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...
最新文章
- 【信息安全】ECC加密算法入门介绍
- RecyclerView的使用和样式
- 基于Xml 的IOC 容器-向容器注册
- Linux中的configure、pkg-config、pkg_config_path
- 聚焦BCS|吴云坤产业峰会演讲:用内生安全框架提升网络安全产值
- PostMan居然要被干掉了!IDEA这款插件太实用了…
- 制作 Pidgin QQ 表情包
- 网吧软件经典大集合.各种网管工具
- matlab 并联机械臂_MATLAB机械臂的两种路径规划
- java redis教程视频_2020年Java视频教程-Redis全集
- 成都单片机开发-STC15F2K60S2-LQFP44引脚含义以及1号引脚实物位置
- 如何将mac中文输入法(搜狗等)设置成默认输入法
- TV端影视APP开发搭建需要注意哪些问题?
- Java面试基础(二)
- awk内置命令RS,ORS,FS,OFS的使用
- springboot+java农家乐系统-住宿-美食-活动vue
- Ludwig Otto Hölder
- FIR.im Weekly - 这是多产的一周
- 广工计算机学院男女比例,广东高校新生数据大揭秘,哪所大学男女比例最大
- A. Tom Riddle's Diary
热门文章
- Go的闭包看你犯错,Rust却默默帮你排坑
- 曾被“劝退”的 C++ 20 正式发布!
- 马云:今后数字技术是让人类能够更好的生存下去
- 一文搞懂 Spring JPA
- 苹果或在 WWDC 宣布放弃英特尔转向自研 5nm ARM 芯片,这次时机成熟了?
- 标贝科技推出情感合成 TTS,让语音交互更有温度!
- 大学生程序员被勒索比特币后,绝地反击! | 原力计划
- 亲测!这款耳机性价比堪比 AirPods
- 雷军:小米有机会重返世界前三;苹果为 Siri 泄露隐私事件致歉;Apache Tomcat 9.0.24 发布 | 极客头条...
- “遗留代码是传奇!”