【问题标题】:utPLSQL: How can i compare two tables?utPLSQL:如何比较两个表?
【发布时间】:2019-08-05 01:29:18
【问题描述】:

假设我有表 1 和表 2。表 2 是表一的更新版本。它可以具有相同或更新的结构、列和数据。我想比较这两个表。

【问题讨论】:

  • 你真的在使用 UTPLSQL 框架吗?您之前的一些问题表明您正在手动滚动单元测试。如果您使用的是 UTPLSQL,请说明是 v2 还是 v3 - 它们具有完全不同的 API。
  • 是的,我正在使用 utPLSQL v3。我已经找到了解决方案。谢谢。
  • 如果您找到了解决方案,请将其作为答案发布,它可能会在未来帮助其他寻求者。

标签: oracle unit-testing plsql utplsql


【解决方案1】:

=> 在此处使用 all_tab_cols 比较表结构的示例查询(根据需要添加数据类型等列和其他比较参数):

SELECT
    t1.table_name
   ,t2.table_name
   ,t1.column_name
   ,t2.column_name
FROM
    (
        SELECT
            *
        FROM
            all_tab_cols
        WHERE
            table_name = 'TEMP1'
    ) t1
    FULL OUTER JOIN (
        SELECT
            *
        FROM
            all_tab_cols
        WHERE
            table_name = 'TEMP2'
    ) t2 ON t1.owner = t2.owner
            AND t1.column_name = t2.column_name;
  1. 比较数据:

    1. 您可以使用类似的查询与连接不同类型的连接来比较左右连接。

      选择 * 从 温度 1 t1 完全加入 temp2 t2 ON t1.id = t2.id;

    2. 您可以使用 Union 、unionall 和 intersect 等 Set 操作来比较进一步使用 distinct。

【讨论】:

    【解决方案2】:

    我的要求是使用 utPLSQL 比较两个表的列、数据和约束。 我通过使用本机 refcursors 满足了我的要求。

    数据比较:

    OPEN p_store FOR SELECT * FROM customers@dblink2;
    OPEN p_store2 FOR SELECT * FROM customers2@dblink2;
    ut.expect(p_store).to_equal(p_store2);
    

    对于列比较:

    OPEN p_store FOR
    SELECT
        A.COLUMN_NAME,
        A.DATA_TYPE,
        A.DATA_LENGTH
    FROM
        (SELECT * FROM USER_TAB_COLUMNS@dblink2 WHERE TABLE_NAME  = 'CUSTOMERS') A;
    OPEN p_store2 FOR
    SELECT
      B.COLUMN_NAME,
      B.DATA_TYPE,
      B.DATA_LENGTH
    FROM
      (SELECT * FROM user_tab_columns@dblink2 WHERE table_name = 'CUSTOMERS') B;
    ut.expect(p_store).to_equal(p_store2);
    

    我使用 utPLSQL V3。如果您使用的是 v2,则可以使用 utassert.eqtable

    【讨论】:

      【解决方案3】:

      如果您想比较 2 个表中的所有列,请尝试以下查询

      select * from table1 t1,table2 t2 where t1.id = t2.id
      

      但是如果你想比较一些指定的列,那么试试下面的查询

      select t1.column,t2.column from table1 t1,table2 t2 where t1.id = t2.id
      group by t1.column,t2.column
      

      它应该符合您的要求。

      【讨论】:

        猜你喜欢
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        相关资源
        最近更新 更多