记录。

是这么个事,要实现一个需求,当人员表里的数据有更新后需要告知其他系统更新他们自己的人员数据。

我想了一下,表里是有时间戳字段的,那我只要监听这个时间就行,拿到数据后用存储过程把数据插入到中间表,然后其他系统从中间表更新到他自己的系统库里面

1.先创建一张所需数据的中间表
create table t_rygx (
ryid varchar(64) primary key not null ,
bm varchar(64),
jh varchar(64),
gh varchar(64),
xm varchar(64),
sfzh varchar(64),
zzjgid varchar(64),
zzjgbm varchar(64),
zzjgmc varchar(200),
zt number ,
gxsj date DEFAULT CURRENT_TIMESTAMP,
cjsj date DEFAULT CURRENT_TIMESTAMP
)
2.创建存储过程
create or replace procedure insert_ry is
--让游标变量指向一个动态select查询的结果集
cursor v_rys is
select
ry.ryid,
ry.bm,
ry.xm,
ry.jh,
ry.gh,
ry.sfzh,
zzjg.zzjgid,
zzjg.bm as zzjgbm,
zzjg.mc as zzjgmc
from t_ry ry
left join t_zzjgcy cy on ry.ryid = cy.ryid
left join t_zzjg zzjg on cy.zzjgid = zzjg.zzjgid
where ry.sfyx = 1 and ry.gxsj > sysdate + ( 10 /24 /60); --当前时间减十分钟
extis integer;--声明变量值
begin
--循环开始
for e in v_rys loop
select count(1) into extis from t_rygx where ryid = e.ryid;
if extis < 1 then
INSERT INTO t_tyqx_rygx ( ryid, xm, bm, jh, gh, sfzh, zzjgid, zzjgbm, zzjgmc, zt, cjsj, gxsj )
VALUES
(
e.ryid,
e.xm,
e.bm,
e.jh,
e.gh,
e.sfzh,
e.zzjgid,
e.zzjgbm,
e.zzjgmc,
                 0,
CURRENT_TIMESTAMP,
CURRENT_TIMESTAMP
);
else
update t_rygx set xm = e.xm,
bm = e.bm,
jh = e.jh,
gh = e.gh,
sfzh = e.sfzh,
zzjgid = e.zzjgid,
zzjgbm = e.zzjgbm,
zzjgmc = e.zzjgmc
                 zt = 0 ,
where ryid = e.ryid ;
end if; --if结束
end loop; --循环结束
end;
3.创建job定时任务
declare job number ;
begin
dbms_job.submit(
job, --返回的定时器id,不用管
'insert_ry;', -- 要执行的存储过程
sysdate, --立即生效
'TRUNC(sysdate,''mi'') + 10/ (24 * 60)' --定时时效 每十分钟执行一次,其他时间自行搜索
);
commit;
end;

  

4.上面三步完成就弄完了 ,然后就可以去看下数据了
select * from t_rygx
5.补充一些定时任务相关的内容
四个参数说明:
    job:输出变量,是此任务在任务队列中的编号;
    what:执行的任务的名称及其输入参数;
    next_date:任务执行的时间;
    interval:任务执行的时间间隔。

-- 查看调度任务
select * from user_jobs;
-- 查看正在执行的调度任务
select * from dba_jobs_running;
-- 查看执行完的调度任务
select * from dba_jobs;

-- 执行定时任务
  BEGIN
    DBMS_JOB.RUN(jobid);
    COMMIT;
  END;
-- 停止已启动的定时任务
BEGIN
DBMS_JOB.BROKEN(25, TRUE, SYSDATE);
COMMIT;
END;
-- 删除指定job
BEGIN
DBMS_JOB.REMOVE(25);
commit;
END;
5.常用INTERVAL 参数值 
描述                        INTERVAL参数值
每天午夜12点 TRUNC(SYSDATE + 1)
每天早上8点30分 TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)
每星期二中午12点 NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24
每个月第一天的午夜12点 TRUNC(LAST_DAY(SYSDATE ) + 1)
每个季度最后一天的晚上11点 TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24
每星期六和日早上6点10分 TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)
每秒钟执行次 Interval => sysdate + 1/(24 * 60 * 60) 如果改成sysdate + 10/(24 * 60 * 60)就是10秒钟执行次 每分钟执行
Interval => TRUNC(sysdate,'mi') + 1/ (24*60) 如果改成TRUNC(sysdate,'mi') + 10/ (24*60) 就是每10分钟执行次 每天定时执行
例如:每天的凌晨1点执行
Interval => TRUNC(sysdate) + 1 +1/ (24) 每周定时执行
例如:每周一凌晨1点执行
Interval => TRUNC(next_day(sysdate,'星期一'))+1/24 每月定时执行
例如:每月1日凌晨1点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 每季度定时执行
例如每季度的第一天凌晨1点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 1/24 每半年定时执行
例如:每年7月1日和1月1日凌晨1点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 每年定时执行
例如:每年1月1日凌晨1点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24

oracle 存储过程 for loop 定时任务的更多相关文章

  1. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

  2. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  3. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  4. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  5. ORACLE存储过程学习

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

  6. Oracle 存储过程学习

    转自:http://blog.chinaunix.net/uid-20495387-id-174394.html http://www.cnblogs.com/rootq/articles/11000 ...

  7. 【PL/SQL系列】Oracle存储过程使用动态SQL

    Oracle存储过程相信大家都比较了解,下面就为您介绍Oracle存储过程使用动态SQL的方法,希望对您能够有所帮助. CREATE OR REPLACE PROCEDURE P_STAT_SCORE ...

  8. Oracle存储过程-自定义数据类型,集合,遍历取值

    摘要 Oracle存储过程,自定义数据类型,集合,遍历取值 目录[-] 0.前言 1.Packages 2.Packages bodies 3.输出结果 0.前言 在Oracle的存储过程中,可能会遇 ...

  9. (转)oracle 存储过程 带游标作为OUT参数输出

    (转)oracle 存储过程 带游标作为OUT参数输出 存储过程返回OUT参数的游标 例子. 包中带过程 要自己定义一个type [cur_name] is ref cursor游标,返回的时候就直接 ...

  10. Oracle存储过程,以逗号分隔字符串传参的处理

    Oracle存储过程,经常会遇见传入的参数是逗号分隔. 处理需要3步: 第一步,创建Type类型 第二部,创建函数 第三部,创建存储过程 代码如下: 第一步: create or replace ty ...

随机推荐

  1. 接口新特性--java进阶day03

    1.接口新特性 在JDk8和JDK9开始,接口可以定义普通方法 这时就会感到很奇怪,明明之前说好接口只是用来制定规则的,为什么现在又可以定义普通方法了呢? 我们以一个公司案例进行讲解,公司1.0上线了 ...

  2. 【SpringMVC】RESTful CRUD

    RESTful CRUD REST:即 Representational State Transfer.(资源)表现层状态转化.是目前最流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方 ...

  3. 再说PG的连接

    前面说过连接PG的方法,但是遇到问题又不通了. 按照前面的做法还是不行,正是鼻子气歪了. 到pg老家下载PGODBC,安装了,还是不行. 其实仅仅copy一个libpg.dll是不够的.因为libpg ...

  4. 静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析

    静态批处理[1] 定义 标明为 Static 的静态物件,如果在使用相同材质球的条件下,在Build(项目打包)的时候Unity会自动地提取这些共享材质的静态模型的Vertex buffer和Inde ...

  5. Redis 分布式锁的正确实现原理演化历程与 Redission的源码

    当线程A,加锁并设置过期时间-->执行业务-->判断锁id完成后,但这时CPU线程调度其它工作了在这里卡住了, 而且也到了锁的过期时间了被动被删除,当线程B,加锁并设置过期时间--> ...

  6. javaWeb基础之会话(Cookies、Session)

    一. 1. 会话:一次会话中包含多次请求和响应 2. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止[浏览器关闭或服务器关闭] 功能:在一次会话的范围内的多次请求间,共享数据 ...

  7. 康谋分享 | AD/ADAS的性能概览:在AD/ADAS的开发与验证中“大海捞针”!

    如果您希望从数百万小时的驾驶数据中查找特定的相关驾驶事件和未遂事故,以确保您的所需功能正确运行,最好的方法就是创建一个系统性能的概览分析,实现在数据日志中快速检索关注点.为此,康谋在本文将为您详细介绍 ...

  8. CTF靶场学习-XXE漏洞篇

    XXE漏洞1(无限制) XXE特征:在HTTP的Request报文出现一下请求报文,即表明此时是采用XML进行数据传输,就可以测试是否存在XML漏洞. 默认xxe,没有任何限制,可以直接读取flag ...

  9. 游戏开发之Cocos3着色器/shader快速入门

    本文为学习笔记,不排除有谬误,但确保都是亲测.另外,傻狗百度收不收录的无所谓,我来博客园就是为了记记笔记. 对于新人,首先明确一点:shader需要通过材质的方式作用于模型上 所以有个很关键的步骤,c ...

  10. 探秘Transformer系列之(30)--- 投机解码

    探秘Transformer系列之(30)--- 投机解码 目录 探秘Transformer系列之(30)--- 投机解码 0x00 概述 0x01 背景 1.1 问题 1.2 自回归解码 0x02 定 ...