У меня есть интересная проблема, если бы вы могли поделиться своими мыслями ... Я немного изменил данные, но структура та же
create table TestReplace (Description varchar2(500), ParamValue1 number, ParamValue2 number, ParamValue3 number);
insert into TestReplace (Description) values ('This sentence has no parameteres, and it should be shown like this');
insert into TestReplace (Description, ParamValue1) values ('This sentence has only one parametere, and it should be shown right here {param} with rest of text', 100);
insert into TestReplace (Description, ParamValue1, ParamValue2) values ('This sentence has two parameteres, one here {param} and one here {param}, show full sentence', 100, 200);
insert into TestReplace (Description, ParamValue1, ParamValue2, ParamValue3) values ('This sentence has all parameteres, here {param} and here {param} and there {param}', 100, 200, 300);
COMMIT;
В моем предложении есть вхождения слова {param}
иногда или никогда ... и столбцы ParamValue1
, ParamValue2
, ParamValue3
... Как можно заменить первые вхождения слова {param}
значением столбца ParamValue1
, вторым словом {param}
значениемстолбец ParamValue2
и третий со значением столбца ParamValue3
Я пытался что-то вроде этого ...
select CASE WHEN ParamValue1 IS NULL
THEN Description
ELSE
substr(Description, 1, INSTR(Description,'{param}', 1, 1) - 1) || ParamValue1 ||
CASE WHEN ParamValue2 IS NULL
THEN substr(Description, INSTR(Description,'{param}', 1, 1) + 7, LENGTH(Description) - INSTR(Description,'{param}', 1, 1) + 6)
WHEN ParamValue2 IS NOT NULL THEN
substr(Description, INSTR(Description,'{param}', 1, 1) + 7, INSTR(Description,'{param}', 1, 2) + 6 - INSTR(Description,'{param}', 1, 1) + 6) || ParamValue2
END
END
END
from TestReplace
Но это никуда меня не привело, и лично я не думаю, что этобудет довольно быстро работать с большим набором строк
Так как же мне выполнить эту замену текста?