Вот один из способов сделать это, используя REGEXP_SUBSTR
с группами захвата:
SELECT
REGEXP_SUBSTR(mc_clob, ':1A:(.*):1B:', 1, 1, 'n', 1) AS code1A,
REGEXP_SUBSTR(mc_clob,':1B:(.*):1C:', 1, 1, 'n', 1) AS code1B,
REGEXP_SUBSTR(mc_clob,':1C:(.*)', 1, 1, 'n', 1) AS code1c
FROM tableA;

Демо
Чтобы понять, как это работает, сделайте первый вызов REGEXP_SUBSTR
:
REGEXP_SUBSTR(mc_clob, ':1A:(.*):1B:', 1, 1, 'n', 1)
Это говорит, что соответствует :1A:(.*):1B:
, захватывая весь контент между :1A:
и :1B:
маркеры. Пятый параметр - n
, который сообщает Oracle, чтобы точка соответствовала символам новой строки. То есть (.*)
будет захватывать весь контент между двумя маркерами, в том числе между строками. Шестой параметр - 1
, что означает, что возвращаемое значение будет первой (и единственной) группой захвата. Аналогичная логика применима ко второму и третьему вызову REGEXP_SUBSTR
.