防止在oracle中重复记录

问题描述 投票:0回答:1

我需要知道方法,我们必须防止在没有主要约束的表中重复记录。

场景:

存在两个数据库,一个是集中式的另一个是在域中用作实时项目的生产。

我们的项目用于支付薪资。为此,第三方组织将员工薪资数据推送到集中式数据库中。

我们在数据库中迁移它们,你可以认为是一个精确的副本。迁移后,我们验证双方的记录。

如果由第三方推动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,或三重情况也是我,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:

如何为此表创建唯一索引?

oracle11g oracle-sqldeveloper
1个回答
0
投票

是的你可以。在导航器上选择所需的表并右键单击,选择索引>创建索引

出现此对话框时,您可以创建多列唯一索引。 enter image description here你也可以看到你要写的DDL。 enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.