oracle 定时分表

1.创建存储过程分表

CREATE OR REPLACE PROCEDURE CREATE_DAY_TABLE IS
  /*变量*/
  grantSql VARCHAR2(50);
  dayStr    VARCHAR2(8);
  tableCount int(2);
  createSql  VARCHAR2(1000);
BEGIN
  /*给当前用户赋予权限*/
  grantSql := 'grant create any table to userName';
  EXECUTE IMMEDIATE grantSql;
  /*每天创建一个新表	注意create table 后边的空格*/
  SELECT TO_CHAR(SYSDATE, 'yyyyMMdd')+1 INTO dayStr FROM dual;
  createSql := 'CREATE TABLE ' || 'TEST_TABLE_DAY_' || dayStr ||
		'( TESTID VARCHAR2(100),
		TESTNAME VARCHAR2(100),
		SEX NUMBER DEFAULT 1 )';
  SELECT COUNT(1) INTO tableCount FROM user_tables WHERE table_name = CONCAT('TEST_TABLE_DAY_', dayStr);
	--表名不存在时,创建
  IF tableCount = 0 THEN
    EXECUTE IMMEDIATE createSql;
    COMMIT;
  END IF;
END CREATE_DAY_TABLE;

2.定时执行存储方法

2.1创建定时器

DECLARE
    jobno NUMBER;
BEGIN
    dbms_job.submit(
            jobno, --定时器ID,系统自动获得
            'CREATE_DAY_TABLE;', --what执行的过程名,注意存储方法后面必须要有分号
            SYSDATE, --next_date,定时器开始执行的时间,这样写表示立即执行
            'TRUNC(sysdate,''mi'') + 1/ (24*60)' --interval,设置定时器执行的频率,这样写每隔1分钟执行一次
        );
    COMMIT;
END;

创建成功后,默认开启定时任务
注意:存储方法后面必须要有分号,否则报错

PLS-00103: 出现符号 "END"在需要下列之一时:
:= . ( @ % ;
符号 “;” 被替换为 “END” 后继续。
在这里插入图片描述

2.2.查看定时任务

select * from user_jobs;

执行结果如下:
在这里插入图片描述

2.3关闭定时器

BEGIN
    DBMS_JOB.BROKEN(64,  TRUE,  SYSDATE);
    COMMIT;
END;

在这里插入图片描述

2.4开启定时器

BEGIN
    DBMS_JOB.RUN(64);
    COMMIT;
END;

2.5删除指定任务

BEGIN
    DBMS_JOB.REMOVE(64);
    commit;
END;

注意:如果存储过程有误,定时任务仍可以正常执行,但是下图红框中的时间数据会缺失。
在这里插入图片描述

oracle分表参考文章
定时任务参考文章

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值