我正在尝试从一个包含多个笔记的字符串中提取数据,这些笔记被附加到一个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条记录的表运行此操作,我永远不会得到任何结果,我认为这是由于它返回的大量重复行。有没有办法让我防止这种情况的发生?
非常感谢。