utPLSQL: Как я могу сравнить две таблицы? - PullRequest
0 голосов
/ 21 ноября 2018

Допустим, у меня есть таблица 1 и таблица 2. Таблица 2 является обновленной версией таблицы один.Он может иметь такую ​​же или обновленную структуру, столбцы и данные.Я хочу сравнить эти две таблицы.

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Если вы хотите сравнить все столбцы в 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

Это должно работать для вашего требования.

0 голосов
/ 22 ноября 2018

Моим требованием было сравнение столбцов, данных и ограничений двух таблиц с использованием 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 .

0 голосов
/ 21 ноября 2018

=> Пример запроса для сравнения структуры таблиц (при необходимости добавьте столбцы, такие как тип данных и другие параметры сравнения), используя 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. Вы можете использовать аналогичный запрос с объединением различных типов объединения для сравнения, как с левым, так и с правым соединением.

    SELECT *ОТ temp1 t1 ПОЛНОЕ СОЕДИНЕНИЕ temp2 t2 ВКЛ t1.id = t2.id;

  2. Вы можете использовать операции Set, такие как union, unionall и intersect, чтобы сравнить дальнейшее использование различных.

...