oracle数据库去重任务

oracle 数据库去重

oracle 数据库可以不指定主键,那么完全相同的元素我们要如何去重呢?oracle有自带的行唯一标识 ROWID

简介

rowid是一个用来唯一标记表中行的伪列。它是物理表中行数据的内部地址,包含两个地址,其一为指向数据表中包含该行的块所存放数据文件的地址,另一个是可以直接定位到数据行自身的这一行在数据块中的地址。

利用ROWID进行数据库的去重操作

通过定时任务,每天凌晨两点对前一天的数据进行去重

--删除前一天重复数据的存储过程
CREATE OR REPLACE PROCEDURE DEDUPLICATION_ETC_EXIT AS
BEGIN
  DELETE FROM "ETCTS_EXIT"
  WHERE (EXTIME >= TRUNC(SYSDATE) - 1 AND EXTIME < TRUNC(SYSDATE))
  AND ROWID NOT IN (
    SELECT MAX(ROWID)
    FROM "ETCTS_EXIT" e
    WHERE EXTIME >= TRUNC(SYSDATE) - 1
    AND EXTIME < TRUNC(SYSDATE)
    GROUP BY PASSID, ID, VEHICLEID
  );

  COMMIT;
END;

--然后创建 scheduler 定时任务
BEGIN
  DBMS_SCHEDULER.CREATE_JOB (
    job_name        => 'DEDUPLICATION_ETCEXIT_SCHEDULER',
    job_type        => 'STORED_PROCEDURE',
    job_action      => 'DEDUPLICATION_ETC_EXIT',
    start_date      => SYSDATE,
    repeat_interval => 'FREQ=DAILY; BYHOUR=2; BYMINUTE=0; BYSECOND=0',
    enabled         => TRUE,
    comments        => '清理过期数据');
END;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值