Ответ 1
Вы уверены, что данные, хранящиеся в базе данных, фактически являются вопросительным знаком? Я бы предпочел предположить, что из данных выборки проблема заключается в преобразовании набора символов, где ?
используется в качестве замещающего символа, когда символ не может быть представлен в наборе символов клиента. Возможно, база данных фактически хранит символы "умной цитаты" Microsoft, а не простые апострофы.
Что показывает функция DUMP
фактически хранится в базе данных?
SELECT column_name,
dump(column_name,1016)
FROM your_table
WHERE <<predicate that returns just the sample data you posted>>
Какое приложение вы используете для просмотра данных? Что клиент NLS_LANG
установлен на?
Что такое база данных и национальный набор символов? Сохраняются ли данные в столбце VARCHAR2
? Или NVARCHAR2
?
SELECT parameter, value
FROM v$nls_parameters
WHERE parameter LIKE '%CHARACTERSET';
Если все символы проблемы хранятся в базе данных как 0x19 (десятичное значение 25), ваш REPLACE
должен быть чем-то вроде
UPDATE table_name
SET column1 = REPLACE(column1, chr(25), q'[']'),
column2 = REPLACE(column2, chr(25), q'[']'),
...
columnN = REPLACE(columnN, chr(25), q'[']')
WHERE INSTR(column1,chr(25)) > 0
OR INSTR(column2,chr(25)) > 0
...
OR INSTR(columnN,chr(25)) > 0