在Oracle数据库中使用IGNORE_DUP_KEY(sqlplus)

时间:2014-01-15 08:56:38

标签: sql oracle sqlplus

我正在尝试在少于10000行上运行以下代码,但我正在

  

ORA-00001:违反了唯一约束(constraint_name)(非意外)。

UPDATE table1
   SET EMAILADRESSE = replace(EMAILADRESSE,'@domain1.no','@domain2.no')
 WHERE EMAILADRESSE LIKE '%@domain1.no' ;

尝试IGNORE_DUP_KEY,但据我的研究显示,oracle / SQL * PLUS不支持此功能。你有替代方案吗?

2 个答案:

答案 0 :(得分:1)

另一个NOT EXISTS

UPDATE table1 t1
   SET EMAILADRESSE = replace(EMAILADRESSE,'@domain1.no','@domain2.no')
 WHERE EMAILADRESSE LIKE '%@domain1.no' 
 AND NOT EXISTS
 (SELECT 'X' FROM table1 t2 WHERE t2.EMAILADRESSE = replace(t1.EMAILADRESSE,'@domain1.no','@domain2.no'));

答案 1 :(得分:0)

首先,看来异常消息EMAILADRESSE列具有唯一约束。您正尝试通过更改已存在至少一个已替换域名的电子邮件地址的电子邮件域来更新table1。

  UPDATE table1
    SET EMAILADRESSE = replace(EMAILADRESSE,'@domain1.no','@domain2.no')
    WHERE EMAILADRESSE LIKE '%@domain1.no' AND   replace(EMAILADRESSE,'@domain1.no','@domain2.no') NOT IN (SELECT EMAILADRESSE FROM table1)