utPLSQL:如何比较两个表?

时间:2018-11-21 05:40:42

标签: oracle unit-testing plsql utplsql

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

3 个答案:

答案 0 :(得分: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. 您可以对不同类型的联接使用类似的查询,以比较左右联接。

      选择  * 从  temp1 t1  完全连接temp2 t2 ON t1.id = t2.id;

    2. 您可以使用Set操作(例如union,unionall和intersect)来比较进一步区分使用情况。

答案 1 :(得分:1)

如果要比较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`

应该可以满足您的要求。

答案 2 :(得分:1)

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

用于数据比较:

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