假设我有表1和表2。表2是表1的更新版本。它可以具有相同或更新的结构,列和数据。我想比较这两个表。
答案 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;
要比较数据:
您可以对不同类型的联接使用类似的查询,以比较左右联接。
选择 * 从 temp1 t1 完全连接temp2 t2 ON t1.id = t2.id;
您可以使用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 。