正文
Oracle 核心列信息查看与处理
背景
最近想对数据库表进行跨数据之间的比照
因为有一些自增列或者是时间戳的列不需要进行对比
后者是对比容易导致失真.
所以就准备选用其他方式进行一下处理.
本文主要是简单记录一下生成SQL的办法.
获取必要列作为select 的字段
SELECT
LISTAGG ( COLUMN_NAME, ',' )
FROM
user_tab_cols
WHERE
table_name = upper( 'Sometable' )
AND column_name NOT LIKE '%TIME%'
AND column_name NOT LIKE '%_PT'
AND column_name NOT LIKE '%_CHT'
AND column_name NOT LIKE '%_ES'
AND column_name NOT LIKE '%_EN'
AND column_name NOT LIKE '%DATE'
ORDER BY
COLUMN_NAME ASC
SQL解释
使用LISTAGG的语法进行 行转列.
Oracle自动将最后一个 , 逗号进行了shrink
然后将列名里面不需要对比的进行一下过滤.
将列罗列出来.
拼接对比使用的获取SQL
select SQL1的结果集 From Sometable where timestamp > sysdate -1 order by 1
# 解释
将第一步SQL结果集拿过来. 然后可以进行适当的处理和删减.
如果有其他异常列可以去掉 有需要添加的可以手工添加.
如果增加了需要同步的列 建议也定期进行维护.
设置仅查询最近24小时的数据.
这个列不同表不一样, 也需要单独进行设置.
设置数据库排序, 避免python排序 影响性能.
结果验证
直接使用SQL2的SQL进行查询结果的验证.
根据得出的结果进行判断.
务必进行自定修改.
保证数据准确.