Ошибка: ORA-28500: [Oracle] [Драйвер ODBC SQL Server] Строковые данные, усечение справа - PullRequest
1 голос
/ 28 декабря 2010

Мы пытаемся подключиться к Sql Server 2005 через шлюз Oracle 11gR2, и когда мы запрашиваем представление, которое получает данные с Sql Server, мы получаем эту ошибку:

Error: ORA-28500:[Oracle][ODBC SQL Server Driver]String data, right truncation 

Я закомментировал некоторые столбцы в запросе, работающем в Oracle, и это сработало. Комментируемые столбцы имеют тип данных VARHCAR (30), но есть и другие поля, которые также являются VARCHAR (30).

Есть ли обходной путь для этой ошибки, если я добавлю эти 3 столбца, которые не выполняют весь запрос, все будет в порядке, я попытался переименовать эти поля в представлении, работающем на Sql Server 2005, который является источником данных, без результата ,

Установлены драйверы ODBC и SQL Server, мы используем драйвер SQL Server "dg4msql". Кодировка Oracle - AL32UTF8.

1 Ответ

0 голосов
/ 07 апреля 2011

Наиболее вероятной причиной этого является то, что эти столбцы содержат символы, которые Oracle будет использовать для хранения более одного байта. Шлюзы видят, что столбец в SQL Server определен как VARCHAR (30), и поэтому он создает столбец VARCHAR2 (30) в Oracle, однако здесь (30) это 30 байтов, а не 30 символов, так что вы можете получить усечение данных, если общее количество байтов, которые Oracle хочет использовать, превышает 30. (т. е. у вас 30 символов в SQL Server, но для одного из них требуется 2 байта в Oracle, поэтому длина теперь равна 31, поэтому, следовательно, слишком большая).

В качестве обходного пути измените столбцы VARCHAR (30) в SQL Server на NVARCHAR (30) - шлюз узнает, что он может получить многобайтовые символы, и переведет определение столбца как NVARCHAR и разрешит вставки.

См. Таблицу преобразования типов данных для шлюза для 11gR2 для получения дополнительной информации о том, как будут переведены столбцы.

...