Предотвратить дублирование записей в оракуле - PullRequest
0 голосов
/ 12 сентября 2018

Мне нужно знать, как мы должны предотвратить дублирование записей в таблице, в которой не было первичного ограничения.

СЦЕНАРИЙ:

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

Наш проект используется для выплаты заработной платы. Для этого сторонняя организация поместила данные о зарплате сотрудников в централизованную базу данных.

Мы переносим то же самое в нашу базу данных, вы можете считать точную копию. после миграции мы проверяем записи с обеих сторон.

Если 2000 записей выдвинуто третьей стороной, то на нашей стороне должно присутствовать ровно 2000 записей.

Проблема в том, что понятия первичного ключа не существует ни на централизованной, ни на нашей стороне.

Формат данных показан ниже

SALARY_REPORT_ID    EMP_NAME    EMP_CODE    PAY_CODE    PAY_CODE_NAME   AMOUNT  PAY_MODE    PAY_CODE_DESC   YYYYMM  REMARK  EMP_ID  PRAN_NUMBER PF_NUMBER   PRAN_NO ATTOFF_EMPCODE  REFERENCE_ID
13488158    Mr. Javed Jafri 91559037    104     7427    1   HOUSE RENT ALLOW    201802      119     22782303        150025  1-268
13488159    Mr. Javed Jafri 91559037    100     23885   3   BASIC PAY   201802      119     22782303        150025  1-268
13488160    Mr. Javed Jafri 91559037    103     9590    1   DEARNESS ALLOW. 201802      119     22782303        150025  1-268
13488161    Mr. Javed Jafri 91559037    100     191800  1   BASIC PAY   201802      119     22782303        150025  1-268
13488162    Mr. Javed Jafri 91559037    303     40000   2   PF SUB-PAY(GPF) 201802      119     22782303        150025  1-268
13488163    Mr. Javed Jafri 91559037    502     20  2   G.T.I.S.    201802      119     22782303        150025  1-268
13488164    Mr. Javed Jafri 91559037    503     72  2   SCLIS   201802      119     22782303        150025  1-268
13488165    Mr. Javed Jafri 91559037    999     69441   1   NET EARNING 201802      119     22782303        150025  1-268
13488166    Mr. Javed Jafri 91559037    998     195692  2   GROSS DEDUCTION 201802      119     22782303        150025  1-268
13488167    Mr. Javed Jafri 91559037    997     265133  1   GROSS EARNING   201802      119     22782303        150025  1-268
13488168    Mr. Javed Jafri 91559037    134     16006   3   WAGE REVISION ARREARS   201802      119     22782303        150025  1-268
13488169    Mr. Javed Jafri 91559037    108     400 1   CONVEYANCE ALLOWANCE    201802      119     22782303        150025  1-268
13488170    Mr. Javed Jafri 91559037    134     16025   3   WAGE REVISION ARREARS   201802      119     22782303        150025  1-268
13488171    Mr. Javed Jafri 91559037    506     600 2   GSLI(Board Employee)    201802      119     22782303        150025  1-268
13488172    Mr. Javed Jafri 91559037    312     155000  2   INCOME TAX  201802      119     22782303        150025  1-268

Как показано выше в наборе данных, один сотрудник связан со многими оценками и суммой.

Теперь каждый месяц нам нужно переносить точные данные в нашу базу данных. В прошлом месяце данные будут продублированы на нашей стороне. Это означает, что в сторонних БД запись была 2000, после миграции мы обнаружили, что это 4000, или тройной случай также i, e 6000.

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

Мне предложили создать уникальный индекс путем объединения двух или более столбцов, но после попытки я получил ошибку

CREATE UNIQUE INDEX SDR ON SALARY_DETAIL_REPORT_042018(EMP_CODE,PAY_CODE);

Error starting at line : 11 in command -
CREATE UNIQUE INDEX SDR ON SALARY_DETAIL_REPORT_042018(EMP_CODE,PAY_CODE)
Error report -
SQL Error: ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found
01452. 00000 -  "cannot CREATE UNIQUE INDEX; duplicate keys found"
*Cause:    
*Action:

Как мне создать уникальный индекс для этой таблицы?

1 Ответ

0 голосов
/ 12 сентября 2018

Да, вы можете.выберите нужную таблицу в навигаторе и щелкните правой кнопкой мыши, выбрав индексы> Создать индекс

Когда появится это диалоговое окно, вы можете создать свой уникальный индекс из нескольких столбцов.enter image description here Вы также можете увидеть DDL, который вы бы написали.enter image description here

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