Я пытаюсь извлечь данные из строки, которая состоит из нескольких заметок, которые добавляются в столбец varchar (4000). Я использую смесь регулярных выражений и функций в запросе вместе с CONNECT BY LEVEL с использованием regexp_count, потому что я понятия не имею, будет ли одна заметка или несколько. Когда я возвращал результаты, я заметил, что было много повторяющихся строк. Я полагаю, что это исключительно из-за CONNECT BY, и это не то, что я должен был использовать до сих пор, поэтому я думаю, что я что-то пропустил.
Вот запрос;
select
id,
substr(regexp_substr(VALUE,'^LOCKED BY USER: +(.*)',1,level,'m'),17) as LOCKUSER,
substr(regexp_substr(VALUE,'^LOCKED ENTITY: +(.*)',1,level,'m'),16) as LOCKED_ENTITY,
TO_DATE(LTRIM(regexp_substr(VALUE,'^LOCKED AT: ([[:digit:]]{2}/[[:digit:]]{2}/[[:digit:]]{4}\.?)',1,level,'m'),'LOCKED AT: '),'DD/MM/YYYY') as Dates_Locked,
substr(regexp_substr(VALUE,'^LOCK NOTES: +(.*)',1,level,'m'),13) as LOCK_NOTES,
'LOCK' as ACTION
from TABLE
where regexp_substr(VALUE,'^LOCK NOTES: +(.*)',1,level,'m') IS NOT NULL
AND TO_DATE(LTRIM(regexp_substr(VALUE,'LOCKED AT: ([[:digit:]]{2}/[[:digit:]]{2}/[[:digit:]]{4}\.?)',1,level,'m'),'LOCKED AT: '),'DD/MM/YYYY') >= (SYSDATE -365)
connect by level <= regexp_count(VALUE,CHR(10)||CHR(13));
Если я разрешу это запустить для таблицы с 10K-записями, я никогда не получу никаких результатов, которые, как я полагаю, связаны с большим количеством дублирующихся строк, которые он возвращает. Есть ли способ для меня, чтобы предотвратить это?
Большое спасибо