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任务定时运行的更多相关文章

  1. 基于oracle数据库存储过程的创建及调用

    1.PLSQL编程 1.1概念和目的 PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循 ...

  2. Oracle 11g 新特性 -- 自适应游标共享(Adaptive Cursor Sharing: ACS) 说明(转载)

    一.自适应游标共享(Adaptive Cursor Sharing) 说明 1.1 ACS概述绑定变量使Oracle DB 可以为多条SQL 语句共享单个游标,以减少分析SQL 语句所使用的共享内存量 ...

  3. Oracle 11g 环境,使用utl_smtp创建一个存储过程来发送邮件

    太多的在线电子邮件存储过程.我不转发,弄个作为一个简单的例子演示. create or replace procedure Send_mail(mail_body varchar2) is smtp_ ...

  4. Oracle之带参存储过程(存储过程中for循环调用存储过程)

    --带参存储过程create or replace procedure testdate(v in number) is i number; begin i:=v; insert into test_ ...

  5. Oracle数据库连接、存储过程及调用

    Oracle数据库连接.存储过程及调用 1. 定义一个存储过程 create or replace procedure getuser(eid in number, na out varchar, e ...

  6. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  7. Oracle 11g新特性

    文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...

  8. 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 目标端 ...

  9. Oracle 11g R2性能优化 tkprof

    另一篇博文总结了关于SQL TRACE工具的使用方式,但是产生的trace文件格式阅读起来并不是十分友好,为了更好的分析trace文件,Oracle也自带了一个格式化工具tkprof.tkprof工具 ...

随机推荐

  1. ORACLE常用监控语句(未完待续)

    --查询日志的切换频率 select  t1.RECID as srecid        ,t2.RECID as erecid        ,t1.FIRST_TIME as stime     ...

  2. php之表单-2(表单验证)

    PHP 表单验证 本章节我们将介绍如何使用PHP验证客户端提交的表单数据. PHP 表单验证 在处理PHP表单时我们需要考虑安全性. 本章节我们将展示PHP表单数据安全处理,为了防止黑客及垃圾信息我们 ...

  3. 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)

     目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量   PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英 ...

  4. Unity 文字爆炸(风化)消失效果 粒子系统应用

    利用Unity的粒子系统,使用C#代码控制粒子的位置和速度,实现文字风化爆炸的效果. Unity的东西,不像flash,不能直接放到网页中,没办法了,只能放截图了.有兴趣的可以下载看看:text_ex ...

  5. webservice系统学习笔记9-使用契约优先的方式的一个服务端demo(隐式传Header信息)

    服务器端: 1.编写wsdl文件 <?xml version="1.0" encoding="UTF-8" standalone="no&quo ...

  6. 类的专有方法(__repr__)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #http://blog.csdn.net/yyt8yyt8/article/details/7030416 ...

  7. Javascript获取当月的天数

    var d = new Date(); var curMonthDays = new Date(d.getFullYear(), (d.getMonth() + 1), 0).getDate(); a ...

  8. GridView显示数据鼠标悬停变色

    一. 首先在前台GridView中加上onrowdatabound="GridView1_RowDataBound": <asp:GridView ID="Grid ...

  9. 微信小程序:input输入框和form表单几种传值和取值方式

    1.传值:index下标传值.页面navigator传值 1.index下标 实现方式是:data-index="{{index}}"挖坑及e.currentTarget.data ...

  10. @Autowired(required = false)

    标记在 方法上的时候,它会根据类型去spring容器中寻找 对于的形参并且注入. @Repository(value="userDao") public class UserDao ...