DECLARE
str VARCHAR2(200) := 'test test';
pattern VARCHAR2(200) := '(\w+)($|\s+|\W+)';
match VARCHAR2(200);
BEGIN
FOR i IN 1 .. REGEXP_COUNT(str, pattern) LOOP
match := REGEXP_SUBSTR(str, pattern, 1, i, NULL, 1);
IF LENGTH(match) = 4 THEN
DBMS_OUTPUT.PUT_LINE(match);
END IF;
END LOOP;
END;
/
或(不使用REGEXP_COUNT
或在11g中引入的REGEXP_SUBSTR
第6个参数):
DECLARE
str VARCHAR2(200) := 'test test';
pattern CONSTANT VARCHAR2(3) := '\w+';
match VARCHAR2(200);
i NUMBER(4,0) := 1;
BEGIN
match := REGEXP_SUBSTR(str, pattern, 1, i);
WHILE match IS NOT NULL LOOP
IF LENGTH(match) = 4 THEN
DBMS_OUTPUT.PUT_LINE(match);
END IF;
i := i + 1;
match := REGEXP_SUBSTR(str, pattern, 1, i);
END LOOP;
END;
/
输出:
test
test
如果你想要在SQL中使用它,您可以轻松地将其转换为流水线函数或返回集合的函数。
来源
2016-12-16 12:37:57
MT0
我已经看到了许多使用Oracle XML的精彩解决方案,但我对此完全无知。有人可以推荐一本书或网站让我开始? –