假设我有两个模式 TestSchema1 和 TestSchema2 。这两个模式具有相同的表和结构。另外,我有SQL查询
Select * from table_one where table_field = 'xyz'.
Select * from table_two;
这两个表 table_one 和 table_two 可以包含任何列。但是,模式TestSchema1和TestSchema2中的table_one具有完全相同的结构(数据可以不同)。
如何创建一个实用程序方法,用于比较两个模式中SQL语句的数据?类似的东西:
public boolean isDataSameInBothSchemas(String query){
//logic to compare data
}
更新:我还需要知道数据不匹配时的列,所以我不能使用 减去数据库中的操作。
答案 0 :(得分:0)
对于oracle,您可以使用
Select * from schema1.table_two
minus
Select * from schema2.table_two
如果查询没有返回任何行,则数据是相同的。
更新: 查询也必须没有记录。
Select * from schema2.table_two
minus
Select * from schema1.table_two
我们需要从表2的行中减去表1的行,反之亦然。
对于java解决方案,您需要引入一个RowDTO
类来存储每个查询的行数据。
然后为equals()
引入RowDTO
方法来比较对象。
将两个查询结果添加到Set<RowDTO>
。 (可以是例如HashSet)。
在查询之后,您将相应地拥有两组。
Set<RowDTO> schema1Set;
Set<RowDTO> schema2Set;
您可以使用Set interface的方法
boolean retainAll(Collection<?> c);
boolean removeAll(Collection<?> c);
找出差异并使用剩余的项目来找出究竟有什么不同。
如果你需要找到diff列,那么引入一个自定义的util方法来逐字段比较并显示不同的字段。