如何使用PL / SQL从Oracle中的字符串中提取子字符串?

时间:2014-02-04 13:49:34

标签: sql oracle plsql substring

我是SQL的新手,所以这个问题可能相当基本,但我花了很多时间没有成功。

我得到了一块我需要修改的SQL代码。该块当前从文本索引中提取所有标记(“单词”)。我需要做的是遍历每个令牌并(1)从中提取给定长度N的所有字符N-gram,然后(2)将它们插入表中。

因此,如果令牌是abcdfN=3,那么我需要提取abcbcdcdf

我正在努力(1)。

我在Oracle的PL / SQL中发布:版本11.2.0.3.0

我现在拥有的是:

CREATE OR REPLACE PROCEDURE extract_ngrams
AS
     tokens ctx_doc.token_tab;
     w VARCHAR2(255);
     NgramLen NUMBER;
     ngr VARCHAR(10);
BEGIN

-- extract all tokens ("words")
CTX_DOC.TOKENS(myindex,textkey,tokens);

NgramLen := 3;

FOR i IN tokens.FIRST..tokens.LAST LOOP
  w := tokens(i).token;
  dbms_output.put_line(w);
  -- Use SUBSTRING + LEN or some other approach to extract Ngrams of length=NgramLen
  -- insert each Ngram into a table
end loop;

END;
/

FOR循环与SUBSTRINGLEN和/或其他任何适当函数结合起来的正确方法是什么,以某种方式将ngrams提取到ngr中类似于如何将标记提取到w

THX!

1 个答案:

答案 0 :(得分:1)

这是你想要的一个例子:

FOR idx IN 1..(LENGTH(w)-NgramLen+1)
  LOOP
    -- do what you want here
    DBMS_OUTPUT.PUT_LINE(SUBSTR(w,idx,NgramLen));
  END LOOP;

并且不要忘记声明idx NUMBER;