Сравните и перечислите данные столбцов 2 таблиц, где происходит изменение данных.(Что-то вроде минус, но нужно перечислить только столбцы с измененными данными) - PullRequest
0 голосов
/ 17 октября 2018

У меня много таблиц и резервных таблиц.Каждая таблица имеет 250+ столбцов.Теперь я хочу сравнить каждую таблицу с ее резервной таблицей и перечислить строки, которые были изменены.И нужно отображать данные только столбца измененных данных.Если определенный столбец не изменился, эти данные будут отображаться как ноль.

Пример.

Table_X

---------------------------------------------------
|EmployeeID  |Name    |Age    |...|Address        |
---------------------------------------------------
|EMP001      |Raju    |35     |...|Bangalore      |
|EMP002      |Gopal   |40     |...|Chennai        |
---------------------------------------------------

Table_X_Backup

---------------------------------------------------
|EmployeeID  |Name    |Age    |...|Address        |
---------------------------------------------------
|EMP001      |Raju    |35     |...|Bangalore      |
|EMP002      |Gopal   |40     |...|Hyderabad      |
---------------------------------------------------

Я хочу получить итоговую таблицу наборов изменений, как показано ниже.

Change_Set_Table_X

-----------------------------------------------
|EmployeeID  |ChangedColumns                  |
-----------------------------------------------
|EMP002      |Address <Other Columns if Any>  |
-----------------------------------------------

ИЛИ

Delta_Table_X

---------------------------------------------------
|EmployeeID  |Name    |Age    |...|Address        |
---------------------------------------------------
|EMP001      |NULL    |NULL   |...|NULL           |
|EMP002      |NULL    |NULL   |...|CHANGED        |
---------------------------------------------------

Примечание :

  • Использование Oracle DB

  • Столбцы - это разнородные типы данных (состоящие из varchar2, number и clob)

  • В каждой таблице более 250+ столбцов.Поэтому нельзя сравнивать столбец с столбцом вручную.Я нашел функцию, которая перечисляет все столбцы таблицы, это может помочь.

    SELECT имя_ столбца FROM user_tab_cols WHERE table_name = 'Table_X';

    SELECT LISTAGG(column_name, ',') внутри группы (упорядочено по column_name) FROM user_tab_cols где table_name = 'Table_X' и column_name не входит в группу (столбцы типа данных Clob) по table_name;

Код, который я пробовал.Пожалуйста, предложите импровизацию эффективного кода.

Insert into Delta_Table_X
With
A as (Select EmployeeID, Name, Age, ..., Address from Table_X MINUS Select EmployeeID, Name, Age, ..., Address from Table_X_Backup),
B as (Select EmployeeID, Name, Age, ..., Address from Table_X_Backup MINUS Select EmployeeID, Name, Age, ..., Address from Table_X)
Select 
A.EmployeeID "EmployeeID",
Case when nvl(A.Name, 'NULL') <> nvl(B.Name, 'NULL') then null else 'CHANGED' end "Name",
Case when nvl(A...., 'NULL') <> nvl(B...., 'NULL') then null else 'CHANGED' end "...",
Case when nvl(A.Address, 'NULL') <> nvl(B.Address, 'NULL') then null else 'CHANGED' end "Address"
FROM
A join B
on A.EmployeeID = B.EmployeeID
/

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...