有个需求是统计数据库的每日数据增量,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;
这样就可以每天一点查出数据存入到表中!这样是不是很简单呢?喜欢请关注“蛋皮皮”微信公众号!有事没事点个赞,点个再看~~~
网友评论