Вы могли бы сделать что-то вроде этого ... Не совсем уверенный в отношении условия WHERE во внешнем запросе, вы можете настроить его по мере необходимости (я разрешаю ВАЖНО появляться в любой прописной букве, и я не требую, чтобы это былоодно слово - это может быть частью слова «неважно», например, вам придется это исправить), но я считаю, что это не главная проблема, о которой вы спрашиваете.«Основная проблема» действительно решается в подзапросе.
Предложение WITH, конечно, не является частью решения (запрос SELECT);он предназначен только для предоставления тестовых данных.
Прочтите о модификаторе 'm' (для «многострочного») - он позволяет символам ^ и $ совпадать в начале и конце каждой строки текста, а непо умолчанию (это начало и конец всей строки, независимо от символов новой строки).
with
test_data as (
select 10001 as id, 'some random text 11
more random text IMPORTANT 12
more random text IMPORTANT 13' as str
from dual
union all
select 10002, 'other random text 21
other random text IMPORTANT 22
other random text 23'
from dual
)
select *
from (
select id, regexp_substr(str, '^.*$', 1, level, 'm') as str_line
from test_data
connect by level <= regexp_count(str, '^.*$', 1, 'm')
and prior id = id
and prior sys_guid() is not null
)
where upper(str_line) like '%IMPORTANT%' -- modify this as needed
;
ID STR_LINE
----- --------------------------------
10001 more random text IMPORTANT 12
10001 more random text IMPORTANT 13
10002 other random text IMPORTANT 22