0

在更新我之前的问题时,

我有一些换行符分隔的字符串。我需要将每个单词插入表格中。新的逻辑及其条件是,如果不存在则插入,或者将相应的计数更新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;
4

1 回答 1

0

尝试这个

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 这里

样品小提琴

于 2013-07-01T06:43:22.217 回答