有个需求是统计数据库的每日数据增量,oracle有个查询所有表的sql如下,

select t.table_name,t.num_rows from user_tables t;

查询出来的结果如下图所示:

稍微改造一下就可以查出所有表的所有数据,如下:

SELECT sum(num_rows) sum from user_tables;

然后想着写个存储过程,创建个表E_DATA_DAILY存储时间和数量,这里我存的表如下:

建表语句:

CREATE TABLE "E_DATA_DAILY" (
"time" DATE NULL ,
"count" NUMBER NULL 
)

存储过程编写的内容如下:作用是先查出当时的数据总量后插入到E_DATA_DAILY表中方便以后进行查看。

CREATE OR REPLACE
PROCEDURE "GETCOUNT" AS
BEGIN
EXECUTE IMMEDIATE 'insert into E_DATA_DAILY VALUES (sysdate,(SELECT sum(num_rows) sum from user_tables))';
COMMIT;
END;

创建定时任务:

DECLARE
  X NUMBER;
BEGIN
  SYS.DBMS_JOB.SUBMIT
    ( job       => X 
     ,what      => 'GETCOUNT;'
     ,next_date => sysdate
     ,interval  => 'TRUNC(sysdate) + 1 +1/ (24)'
    );
commit;
END;

查询定时任务:

select * from user_jobs;

这样就可以每天一点查出数据存入到表中!这样是不是很简单呢?喜欢请关注“蛋皮皮”微信公众号!有事没事点个赞,点个再看~~~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐