2015-12-11 4 views
1

В существующей базе данных Oracle существует проблема с кодировкой. Со стороны Java я применяю их и исправляю:PL/SQL Применить те же функции больше, чем один раз

textToEscape = textToEscape.replace(/ö/g, 'ö'); 
textToEscape = textToEscape.replace(/ç/g, 'ç'); 
textToEscape = textToEscape.replace(/ü/g, 'ü'); 
textToEscape = textToEscape.replace(/ÅŸ/g, 'ş'); 
textToEscape = textToEscape.replace(/Ä/g, 'ğ'); 

Существует процедура, которая извлекает данные из базы данных. Я хочу написать функцию и применить эту замену внутри. Я нашел эту ссылку:

https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions134.htm

Однако я хочу, чтобы применить последующие заменяет. Как я могу связать их?

ответ

0

Вы можете использовать функцию Oracle CONVERT для преобразования данных в правильный набор символов (совместимый с вашей кодировкой JAVA) внутри самой процедуры базы данных.

Это должно обрабатывать все случаи для вас.

+0

преобразование в 'WE8ISO8859P1' должно работать, но это не так. – kamaci

0

Предполагая, что ваш набор символов базы данных AL32UTF8, искаженные символы, которые вы видите, проистекают из повторного преобразования 8-битовой кодировки набора символов (предположительно iso-8859-9 [турецкий]) в unicode в представлении utf-8 , Второе из этих преобразований, конечно, было ошибочно применено к байтовой последовательности, которая составляла представление ваших данных.

Вы можете отменить это в базе данных с помощью пакета utl_raw. Скажем, tab.col содержит ваши данные, следующий оператор исправляет его.

update tab set col = utl_raw.cast_to_varchar2 (utl_raw.convert (utl_raw.cast_to_raw (col), 'WE8ISO8859P9', 'AL32UTF8')); 

Отливки повторно задать тип данных символов, которые эффективно позволяет работать на основной октетов (байт) последовательности. на этом уровне отображается отображение eroneus utf-8. поскольку результат по-прежнему является допустимым представлением в наборе символов базы данных, простой повторный набор обеспечивает результат.

Смежные вопросы