sql - 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
解决方案
您可以应用如下步骤:
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
并意味着我们不成功。
推荐阅读
- html - 如何在 HTML 中为 CSS 文件定义更多源
- rabbitmq - RabbitMQ Expired TTL 消息不进入死信交换
- javascript - 如何在不改变全局状态的情况下改变局部状态
- android - 如何从 Android 上的数据/数据文件夹中复制 SQLite db?
- javascript - 向上滚动时iPhone上的移动标题问题
- c# - 是否可以在 asp mvc Web 应用程序上记录 Https 请求的 TLS 版本?
- django - 多对多不保存在 django
- spring-security-oauth2 - OAuth2 与多个网关实例共享主体对象
- r - 使用 sf 在 R 中查找时间和空间上最近的邻居
- python - Django激活翻译项目范围而不是每个视图?