防止在oracle中重复记录

时间:2018-09-12 06:13:31

标签: oracle11g oracle-sqldeveloper

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

场景:

存在两个数据库, 一个是集中的 另一个是用于现场项目生产的领域。

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

我们在数据库中迁移了相同的副本,您可以将其视为完全相同的副本。 迁移后,我们会验证双方的记录。

如果第三方推送了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:

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

1 个答案:

答案 0 :(得分:0)

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

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