Oracle объявляет, что выбор в операторе обновления не работает
У меня была проблема, когда из-за кодировки базы данных специальные символы получали странные коды, назначенные им, а затем, получая select ascii(substr(declinereasondesc, 30,1)) from DECLINEREASON t
where declinereasonid = 7;
Я получил код (49827) для £
в дб чарсет. Затем я попытался обновить записи в базе данных.
Проблема в том, что данные не сохраняются в БД или selecting into
значение для varchar2(6);
как-то меняет это и не совпадает REGEXP_REPLACE
любой-больше.
Это сделал ошибку, когда я пытался использовать varchar2(1)
который должен ценить, что может быть подсказкой.
declare c varchar2(6);
begin
select ascii(substr(declinereasondesc, 30,1)) into c from DECLINEREASON t
where declinereasonid = 7;
begin
update DECLINEREASON set declinereasondesc = REGEXP_REPLACE(declinereasondesc, '(.+)('||c||')(\d+)', '\1\3 (GBP)');
commit;
end;
end;
/
commit;
Обновление: пробовал declare c number;
без ошибок, но не обновил значения эфира
1 ответ
Решение
Этот был вызван моей глупостью - забыл обернуть c
в chr(c)
,
declare c number;
begin
select ascii(substr(declinereasondesc, 30,1)) into c from DECLINEREASON t
where declinereasonid = 7;
begin
update DECLINEREASON set declinereasondesc = REGEXP_REPLACE(declinereasondesc, '(.+)('||chr(c)||')(\d+)', '\1\3 (GBP)');
commit;
end;
end;
/
commit;