Ниже написано, что вы используете версию oracle pre 12c, которая добавляет поддержку JSON.
Это не то, что вы сможете сделать с помощью простой замены.
Это должна быть функция / процедура. Чтобы дать вам некоторую идею, смотрите ниже анонимный блок, это будет просто выводить строку, вам нужно будет адаптировать ее для обновления вашего поля, если это то, что вам нужно.
Я добавил третью строку к вашей входной строке, так как first, last и строки в середине должны обрабатываться по-разному, поэтому для полного тестирования потребовалось три записи.
Примечание CHR (13) = возврат каретки, CHR (10) = перевод строки, CHR (9) = таб. Это просто попытка соответствовать вашему форматированию и может быть исключена, если точное форматирование не требуется.
declare
v_input clob default 'Employee[10|||Aryan|||CA|||USA|||URBAN|||IT ENGINEER+++20|||Arjun|||FA|||USA|||RULER|||DEVELOPER+++30|||BOB|||FA|||USA|||RULER|||DEVELOPER]';
v_line varchar2(32000) default null;
v_output clob default null;
v_exit boolean default false;
begin
loop -- loop until we have no more employees to process
if instr(v_input, '+++') > 0 then -- not the last line
if v_output is null then -- first line
v_line := substr(v_input, instr(v_input, 'Employee[') + 9, instr(v_input, '+++') -10); -- get a single employee row (first line)
else
v_line := substr(v_input, 1, instr(v_input, '+++') -1); -- get a single employee row (not fist line)
end if;
v_input := substr(v_input, instr(v_input, '+++') + 3); -- trim off the stuff we have already processed.
else
v_line := substr(v_input, 1, length(v_line) - 2); -- get a single employee row (last line)
v_exit := true;
end if;
if v_output is null then -- first line
v_output := '['||chr(13)||chr(10)||chr(9)||'{'; -- start string
else
v_output := v_output || chr(9) || '{'; -- add the opening brace
end if;
v_output := v_output ||'Employee Name : ' || substr(v_line, instr(v_line, '|||', 1, 1) + 3, instr(v_line, '|||', 1, 2)-6) || ','; -- add name
v_output := v_output ||'Employee ID:' || substr(v_line, 1, 2) || ','; -- add ID
v_output := v_output ||'Employee Role:' || substr(v_line, instr(v_line, '|||', 1, 5) + 3) || '}'; -- add role
if v_exit then -- we are on last line so close it all out and exit loop
v_output := v_output || chr(13) || chr(10) || ']';
exit;
else
v_output := v_output || CHR(13) || CHR(10) || CHR(9) || CHR(9) || ',' || chr(13) || chr(10); -- not last line so format ready to start new line
end if;
end loop;
dbms_output.put_line(v_output);
end;
/
Выход из этого
[
{Employee Name : Aryan,Employee ID:10,Employee Role:IT ENGINEER}
,
{Employee Name : Arjun,Employee ID:20,Employee Role:DEVELOPER}
,
{Employee Name : BOB,Employee ID:30,Employee Role:DEVELOPER}
]