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进行查询结果的验证. 

根据得出的结果进行判断. 
务必进行自定修改. 
保证数据准确.