首页 > 解决方案 > Oracle - PLSQL 在截断/加载过程后检查记录数的差异

问题描述

我们的 IT 团队每个月都会加载几张桌子。新的加载应该比之前的加载有更多的记录,至少多 2% 的记录。这是一个截断和加载过程,我在截断之前从每个表中收集记录数,并且我每个月都会检查 excel 中的差异,以确保数据加载正确。无论如何在Oracle中自动执行此操作。

例如:

Table_name     Before_cnt       After_cnt
XX_TEST1    4,606,619,326   4,983,759,822 
XX_TEST2      121,973,005     123,161,581 

标签: sqloracleplsql

解决方案


您可以应用如下步骤:

SQL> create table XX_TEST1( id int primary key );

SQL> insert into XX_TEST1 select level from dual connect by level <= 100;

SQL> begin -- if table exists, then drop it!
 for c in (select table_name from cat where table_name = 'XX_TEST1_OLD' )
 loop
  execute immediate 'drop table '||c.table_name;
 end loop; 
end;  
/    

SQL> create table XX_TEST1_old as select count(*) as cnt from  XX_TEST1;

SQL> begin
    execute immediate 'truncate table XX_TEST1';
end;  
/  
SQL> insert into XX_TEST1 select level from dual connect by level <= 103;

SQL> with xt1_new(cnt_new) as
(
 select count(id) from XX_TEST1
)
select case when sign( (100 * ( cnt_new - cnt) / cnt)-2 ) = 1 then 1
               else 0 end as "Rate Satisfaction"
      from XX_TEST1_old
      cross join xt1_new;

如果此 SELECT 语句 retuns 1,那么我们成功到达目标,否则返回0并意味着我们不成功。

Demo


推荐阅读