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;
比较数据:
您可以对不同类型的联接使用类似的查询来比较左右联接。
SELECT
*
从
温度 1 t1
FULL JOIN temp2 t2 ON t1.id = t2.id;
您可以使用 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。
假设我有 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;
比较数据:
您可以对不同类型的联接使用类似的查询来比较左右联接。
SELECT * 从 温度 1 t1 FULL JOIN temp2 t2 ON t1.id = t2.id;
您可以使用 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。