如果值已在表上,则更新忽略唯一约束键。 - ORACLE

时间:2015-05-31 19:02:31

标签: sql oracle select oracle11g oracle10g

我有这个oracle命令。

UPDATE TABLE_NUMBERS
SET mdn = concat(concat(substr(mdn,1,2),`9`,substr(mdn,3,9))
WHERE mdn LIKE `8%` AND LENGTH(mdn)=10;

如果数字以8开头并且有10位数字,我必须将数字9放在3位置。

假设我有8187412868,它将是81987412868

819874128688187412868已经在桌面上。

在这种情况下,无需更新或删除,但我想忽略执行整个查询的唯一约束错误。

喜欢

    if (concat(concat(subsrtr(mdn,1,2),`9`,substr(mdn,3,9))
    WHERE mdn LIKE `8%` AND LENGHT(mdn)=10)
    already on the table, then ignore
    else
    execute....

1 个答案:

答案 0 :(得分:2)

您可以使用exists运算符预先检查此值是否退出(另请注意,我修复了OP查询中的括号和拼写错误):

UPDATE table_numbers a
SET    mdn = CONCAT(CONCAT(SUBSTR(mdn, 1, 2), '9') ,SUBSTR(mdn, 3, 9))
WHERE  mdn LIKE '8%' AND 
       LENGTH(mdn) = 10 AND
       NOT EXISTS (SELECT *
                   FROM   table_numbers b
                   WHERE  a.mdn = CONCAT(CONCAT(SUBSTR(b.mdn, 1, 2), 
                                                '9'), 
                                         SUBSTR(b.mdn, 3, 9))