ttt22x 2024-05-18 16:33 采纳率: 33.3%
浏览 4

Oracle两个数据库对比各自的表数据

在Oracle 数据库中,我连接了两个数据库A和数据库B,我想对比数据库A中的表c和数据库B中的表d的数据是否一致,怎么用sql语句查询出?数据一致就返回0?

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-18 16:33
    关注

    引自免费微信小程序:皆我百晓生

    为了在Oracle数据库中比较两个表(表c在数据库A中,表d在数据库B中)的数据一致性,你需要通过创建一个SQL连接查询来实现。这里有一个示例步骤,包括如何建立连接以及编写SQL语句。

    首先,确保你已经在Oracle客户端(例如SQL*Plus或PL/SQL Developer)上登录到数据库A,并且已经设置了数据库B的连接。你可以使用CONNECT命令来连接到数据库B。假设数据库B的连接名为DB_B_CONNECTION,并且已经设置好。如果没有设置,可以参考以下命令进行设置:

    CONNECT username/password@DB_B_CONNECTION;
    

    接下来,你可以使用MERGE语句来合并两个表并找出不匹配的记录。这个操作会将两个表的数据合并在一起,并检查它们是否相等。如果不等,就会返回这些记录。如果所有记录都匹配,那么结果集将是空的,这可以被解释为“数据一致”。

    这是一个示例的SQL语句:

    MERGE INTO A.c a
    USING (SELECT * FROM B.d@DB_B_CONNECTION) b
    ON (a.column1 = b.column1 AND a.column2 = b.column2 AND ...) -- 替换column1, column2等为你实际要比较的列名
    WHEN NOT MATCHED THEN
      INSERT VALUES (b.column1, b.column2, ...); -- 替换column1, column2等为你实际的列名
    
    COMMIT;
    
    SELECT COUNT(*) AS mismatch_count
    FROM (
        SELECT *
        FROM A.c
        MINUS
        SELECT * FROM B.d@DB_B_CONNECTION
    )
    UNION ALL
    SELECT COUNT(*) AS mismatch_count
    FROM (
        SELECT *
        FROM B.d@DB_B_CONNECTION
        MINUS
        SELECT * FROM A.c
    );
    

    注意:请将上述代码中的column1, column2替换为实际需要比较的字段名称。同时,如果你有多个列需要比较,你需要在ON子句中添加更多的条件。

    这段代码首先执行了一个MERGE操作,尝试将B.d表的数据合并到A.c表中。如果有任何不匹配的行,它会插入这些行到A.c表中。然后,我们计算两表之间缺失的行数,分别从A.cB.d和从B.dA.c。这两个计数之和就是不一致的记录数量。如果这个总数是0,那就意味着两个表的数据是一致的。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月18日