Скажем, у вас есть строка, и вам нужно получить все подстроки из 3 символов; это может быть способ:
select substr(string1, level, 3)
from (select '1234567' string1 from dual)
connect by level +2 <= length(string1);
SUBSTR(STRING1,LEVEL,3)
--------------------------------
123
234
345
456
567
Вы можете использовать это, чтобы получить все подстроки из обеих строк, а затем выполнить проверку с помощью JOIN
:
DECLARE
v_string1 VARCHAR2(30) := '1234567';
v_string2 VARCHAR2(30) := 'abcd345efg';
v_check number;
BEGIN
select count(*)
into v_check
from (
select substr(v_string1, level, 3) token
from dual
connect by level +2 <= length(v_string1)
) tokens_1
inner join
(
select substr(v_string2, level, 3) token
from dual
connect by level +2 <= length(v_string2)
) tokens_2
on (tokens_1.token = tokens_2.token);
if v_check = 1 then
dbms_output.put_line('MATCH');
else
dbms_output.put_line('NO MATCH');
end if;
END;
Более компактный способ может быть:
select case when max(instr(string2, substr(string1, level, 3))) = 0
then 'NO MATCH'
else 'MATCH'
end
from (select '1234567' string1, 'abcd345efg' string2 from dual)
connect by level +2 <= length(string1)