utPLSQL:我如何比较两个表?

utPLSQL: How can i compare two tables?

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

=> 在此处使用 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. 您可以对不同类型的联接使用类似的查询来比较左右联接。

      SELECT * 从 温度 1 t1 FULL JOIN temp2 t2 ON t1.id = t2.id;

    2. 您可以使用 union、unionall 和 intersect 等集合操作来比较,进一步使用 distinct。

如果您想比较 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

它应该可以满足您的要求。

我的要求是使用 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