ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行
ORACLE存储过程里游标遍历、调用job定时运行
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;
/
5,在Plsql里面上面sql,job界面显演示样例如以下1.png:
----------------------------------------------------------------------------------------------------------------
<版权全部。文章同意转载,但必须以链接方式注明源地址,否则追究法律责任!>
原博客地址: http://blog.itpub.net/26230597/viewspace-1479382/
原作者:黄杉 (mchdba)
----------------------------------------------------------------------------------------------------------------
ORACLE 11G在存储过程里面遍历游标, 调用job任务定时运行的更多相关文章
- 基于oracle数据库存储过程的创建及调用
1.PLSQL编程 1.1概念和目的 PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循 ...
- Oracle 11g 新特性 -- 自适应游标共享(Adaptive Cursor Sharing: ACS) 说明(转载)
一.自适应游标共享(Adaptive Cursor Sharing) 说明 1.1 ACS概述绑定变量使Oracle DB 可以为多条SQL 语句共享单个游标,以减少分析SQL 语句所使用的共享内存量 ...
- Oracle 11g 环境,使用utl_smtp创建一个存储过程来发送邮件
太多的在线电子邮件存储过程.我不转发,弄个作为一个简单的例子演示. create or replace procedure Send_mail(mail_body varchar2) is smtp_ ...
- Oracle之带参存储过程(存储过程中for循环调用存储过程)
--带参存储过程create or replace procedure testdate(v in number) is i number; begin i:=v; insert into test_ ...
- Oracle数据库连接、存储过程及调用
Oracle数据库连接.存储过程及调用 1. 定义一个存储过程 create or replace procedure getuser(eid in number, na out varchar, e ...
- Dapper完美兼容Oracle,执行存储过程,并返回结果集。
Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...
- Oracle 11g新特性
文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...
- ORACLE 11G R2 RAC classical install OGG12.1(LINUX) 经典抽取模式单项同步配置OGG12.1
博文结构图如下: 一.环境描述以及注意事项 1.1 环境简介 IP 系统 Oracle版本 OGG版本 源端 172.16.10.16/36 RHEL6.5 oracle11204 12.1 目标端 ...
- Oracle 11g R2性能优化 tkprof
另一篇博文总结了关于SQL TRACE工具的使用方式,但是产生的trace文件格式阅读起来并不是十分友好,为了更好的分析trace文件,Oracle也自带了一个格式化工具tkprof.tkprof工具 ...
随机推荐
- iOS 设置UILabel 的内边距
iOS 设置UILabel 的内边距 - (void)drawTextInRect:(CGRect)rect { UIEdgeInsets insets = {, , , }; [super draw ...
- Qt之设置窗口背景
以前遇到的很多小知识,从今天开始都一点一点记录下来... 窗口背景无非两种:背景色.背景图片.Qt中窗口背景如何设置?下面介绍三种方法: 一. QPalette设置背景 二.实现paintEv ...
- 深入浅出 - Android系统移植与平台开发(十三)- Android的对象管理
第六章.Android的对象管理 在Java中,不再使用的对象会通过gc机制来自己主动回收.而Android系统执行时库层代码是由C++编写的,在C++中创建的对象通常使用指针来操作,一旦使用不当.轻 ...
- 算法笔记_125:算法集训之编程大题集一(Java)
目录 1 砝码称重 2 公式解析 3 购物券消费方案 4 机器人行走 5 角谷步数 6 矩形区域的交和并 7 矩阵变换加密法 8 控制台表格 9 拉丁方块填数字 10 立方和等式 1 砝码称重 ...
- TP5报错variable type error: array
variable type error: array 当你在tp5框架中写方法时返回一个数组时,tp5会报错:variable type error: array 这是因为tp5不支持返回数组. ...
- 包装类、object、单例模式、final、抽象类
/*包装类*/ /* byte Byte short Short int Integer long Long char Character float Float ...
- Android拍照+方形剪裁——附代码与效果图
本文链接 http://blog.csdn.net/xiaodongrush/article/details/29173567 參考链接 http://stackoverflow.com/ ...
- LEGO机器人发展史
1998,cybermaster 1999,RCX 1999,micro scout 2000,scout 2002,spybotics NXT NXT2 EV3
- MFC图形绘制——绘制直尺和坐标系
一.实验目的 1.掌握建立MFC应用程序的方法: 2.掌握映射模式. 二.实验内容 1.在MFC中绘制直尺,直尺需要有刻度,类似于日常学生使用的透明塑料直尺,需要建立四个直尺,分别分布在屏幕客户区的上 ...
- NVIDIA PureVideo Decoder解码器注册码
http://www.amznz.com/nvidia-purevideo-decoder/ 重装系统后当然得装终极解码来看高清电影,这次为了给喜欢看HD影片的朋友,特意奉上NVIDIA7以上显卡的N ...