记录。

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

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

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. 使用自制离线数据跑通ElasticFusion

    使用自制离线数据跑通ElasticFusion 实验环境及设备 实验环境: Ubuntu22.04 RTX3060 实验设备: 小米13(Android) Realsense D455 一句话总结就是 ...

  2. 系统自带模版在 emlog pro 1.8.0 底部信息错位问题暂时的解决方案

    问题描述 作为一名 emlog 爱好者,笔者闲暇时间经常为 emlog 系统的 Github 仓库里( https://github.com/emlog/emlog )提 pr 和修修补补,就像其他知 ...

  3. 冒泡排序--java进阶day06

    1.冒泡排序 https://kdocs.cn/l/ciMkwngvaWfz?linkname=150996835 我们会发现上图排序的样子非常像之前打印的倒三角,所以,冒泡排序也需要使用循环嵌套 2 ...

  4. 【Git】工作流

    Git 工作流 概念 在项目开发过程中使用 Git 的方式 分类 集中式工作流 像 SVN 一样,集中式工作流以中央仓库作为项目所有修改的单点实体.所有 修改都提交到 Master 这个分支上. 这种 ...

  5. 自动驾驶 | 为CarLA添加一辆小米SU7 Part I

    自动驾驶 | 为CarLA添加一辆小米SU7 Part I 导言 什么是CarLA? CarLA是一款基于虚幻引擎4(Unreal Engine 4)构建的开源自动驾驶仿真平台,为自动驾驶算法的研发. ...

  6. Spring 的 resolveBeforeInstantiation 方法作用详解

    一.定义 resolveBeforeInstantiation 是 Spring 框架中 AbstractAutowireCapableBeanFactory 类的核心方法之一,它在 Bean 的实例 ...

  7. spring cloud alibaba的小坑:Caused by: com.alibaba.nacos.api.exception.NacosException: endpoint is blank报错问题,

    一.是因为加添spring cloud alibaba配置中心依赖和bootstrap.xml又不使用的问题

  8. jmeter从文档CSV内读取参数且文件路径为相对路径

    如下图,"全站链接扫描"脚本的参数化文件存储在同一目录的参数化文件夹内 预计实现读取该文件使用相对路径(非绝对路径,避免脚本在另一台电脑存在别的目录下能正常读取参数文件) 如读取& ...

  9. app自动化的特殊操作

    一.截屏 File srcfile=driver.getScreenshotAs(OutputType.FILE); //得到截图源文件对象 File dstfile=new File("C ...

  10. 在win nginx下配置symfony3.4,并隐藏项目名称 .php入口

    在win nginx下配置symfony3.4,并隐藏项目名称 .php入口   记录下 # power by www.php.cn #user nobody; worker_processes 1; ...