Следующий оператор обновления должен выполнить эту работу:
update books b
set publisher =
(select listagg(publisher_part, '; ') within group(order by publisher_part)
from (select regexp_substr(bb.publisher, '[a-z]+', 1, level) as publisher_part
from (select publisher from books where id = b.id) bb
connect by regexp_substr(bb.publisher, '[a-z]+', 1, level) is not null
union
select 'lmn' as publisher_part --> your new "publisher" pattern
from dual))
where id = 1; --> id to update
Внутренний выбор (select regexp...
) разбрасывает ваш столбец издателя в отдельных результатах
abc
pqr
xyz
...
После этого новыйзначение lmn
добавляется с помощью union select from dual
, и, наконец, результат агрегируется в предыдущем формате с помощью listagg
.
Лучшее решение, как уже рекомендовано APC, - нормализация вашей таблицы.