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;
Другие вопросы по тегам