2009-10-31 49 views
1

我有Oracle中的表A,它有一个主键(id)。我需要将数据插入到此表中。如何在使用Oracle的插入查询中防止重复的行?

如何防止重复行?

+0

目前尚不清楚你正在尝试做什么。如果你想知道如何填写id列,你应该使用一个序列。 – pgb 2009-10-31 18:19:39

+0

你需要更具体。如下所示:“这是查询(简化),我试图提交但它会生成重复行[查询]” – mga 2009-10-31 18:21:48

回答

5

如果id列被标记为PK您将无法插入重复密钥,则服务器将引发异常。

如果您将使用不同的键插入重复的数据 - 这是您需要处理的逻辑(如对实际数据设置唯一约束)或在插入之前执行检查。

0

首先,您将在该表上创建一个具有序列的唯一标识。然后,当你插入到该表中插入语句,你可以使用:

tableName_sn.nextval 

在一份声明中,如:

inserti into tableName (id) values (tableName_sn.nextval) 

获得序列中的下一个唯一密钥。那么如果你使用这个键,你会保证它是唯一的。然而,要注意的是,如果有人刚刚输入了一个不使用nextval函数的密钥,您将获得主键违规。

1

如果你的意思是你必须是相同的(除了主键)行,你想知道如何删除它们然后执行:

select col2, col3, ...coln, min(id) from A 
group by col2, col3, ...coln 

(即选择所有列除了ID。 )

要获得唯一实例做

delete from A where id not in 
(select min(id) from A 
group by col2, col3, ...coln) as x 

删除除了独特的情况下(即重复的)所有行。