oracle 正则表达式和 MERGE
Posted
技术标签:
【中文标题】oracle 正则表达式和 MERGE【英文标题】:oracle regular expression and MERGE 【发布时间】:2013-07-01 05:47:49 【问题描述】:作为更新我之前的question,
我有一些换行符分隔的字符串。 我需要将每个单词插入表格中。 新的逻辑及其条件是,如果不存在则插入,或者将相应的计数更新1。(就像使用MERGE一样)。 但是我当前的查询只是使用插入,所以我使用了 CONNECT BY LEVEL 方法而不检查值是否存在。
它的语法有点像:
if the word already EXISTS THEN
UPDATE my_table set w_count = w_count +1 where word = '...';
else
INSERT INTO my_table (word, w_count)
SELECT REGEXP_SUBSTR(i_words, '[^[:cntrl:]]+', 1 ,level),
1
FROM dual
CONNECT BY REGEXP_SUBSTR(i_words, '[^[:cntrl:]]+', 1 ,level) IS NOT NULL;
end if;
【问题讨论】:
【参考方案1】:试试这个
MERGE INTO my_table m
USING(WITH the_data AS (
SELECT 'a
bb
&
c' AS dat
FROM dual
)
SELECT regexp_substr(dat, '[^[:cntrl:]]+', 1 ,LEVEL) wrd
FROM the_data
CONNECT BY regexp_substr(dat, '[^[:cntrl:]]+', 1 ,LEVEL) IS NOT NULL) word_list
ON (word_list.wrd = m.word)
WHEN matched THEN UPDATE SET m.w_count = m.w_count + 1
WHEN NOT matched THEN insert(m.word,m.w_count) VALUES (word_list.wrd,1);
关于MERGE
here的更多详情。
示例fiddle
【讨论】:
太棒了!!太棒了..谢谢@horrendous-space-kablooie。唯一的问题是我无法按照 Oracle 文档正确使用序列(没有间隙)。以上是关于oracle 正则表达式和 MERGE的主要内容,如果未能解决你的问题,请参考以下文章