【发布时间】:2014-03-29 10:14:54
【问题描述】:
我有一个带有正则表达式的查询,它接受一个字符串并拆分单词以插入表中。该表只有 2 列(TWEET 和 PALABRA),它们都构成一个主键。
查询是这样的:
INSERT INTO TWEET_PALABRAS (TWEET, PALABRA)
SELECT
NEW_TWEET,
TRANSLATE(regexp_substr(NEW_TITULO,
'[^[:punct:]|[:space:]]+',
1,
level),
'áéíóúÁÉÍÓÚ',
'aeiouAEIOU')
FROM DUAL
where LENGTH(regexp_substr(NEW_TITULO, '[^[:punct:]|[:space:]]+', 1, level)) >= 5
connect by regexp_substr(NEW_TITULO, '[^[:punct:]|[:space:]]+', 1, level) is not null;
如果一个词在推文中重复,我会遇到 duplicate key 异常,避免这种情况的正确方法是添加 ON DUPLICATE KEY UPDATE 子句,但这会导致语法错误:
INSERT INTO TWEET_PALABRAS (TWEET, PALABRA)
SELECT
NEW_TWEET,
TRANSLATE(regexp_substr(NEW_TITULO,
'[^[:punct:]|[:space:]]+',
1,
level),
'áéíóúÁÉÍÓÚ',
'aeiouAEIOU')
FROM DUAL
where LENGTH(regexp_substr(NEW_TITULO, '[^[:punct:]|[:space:]]+', 1, level)) >= 5
connect by regexp_substr(NEW_TITULO, '[^[:punct:]|[:space:]]+', 1, level) is not null;
ON DUPLICATE KEY UPDATE TWEET=NEW_TWEET;
我不需要更新重复键上的任何内容,只是为了避免异常,另外,如果重复键发生,重复键之后的下一个单词也应该插入。这段代码在一个触发器内,在这个触发器之后有更多动作(因此异常块不是解决方案)。
谢谢
【问题讨论】:
标签: oracle primary-key duplicate-data