我有这个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
。
但81987412868
和8187412868
已经在桌面上。
在这种情况下,无需更新或删除,但我想忽略执行整个查询的唯一约束错误。
喜欢
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....
答案 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))