почему 12c с расширенным пределом varchar2 по-прежнему конвертирует sql server varchar (max) в long - PullRequest
0 голосов
/ 05 апреля 2019

Oracle версия 12.1.0.2 max_string_size = extended

Я использую ODBC SQL Server для подключения к базе данных SQL Server через шлюз Oracle к SQL Server, соединение работает нормально, и я могу получить доступ к таблицам SQL Server,

Однако, согласно документации Oracle, начиная с 12c и с расширенным ограничением на тип данных varchar2, преобразование sqlserver varchar (max) в oracle Long произойдет только в том случае, если длина данных сервера sql превышает 32k.

В моей таблице sql server есть несколько столбцов, определенных как varchar (max), и все те, которые я вижу, преобразуются в LONG, когда я пытаюсь описать таблицу через dblink.Мне нужно загрузить данные с сервера sql в oracle, и вышеуказанная проблема очень усложняет задачу, поскольку более одной длинной колонки не может быть скопировано через dblink.

Любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 06 апреля 2019

Я создал представление на стороне сервера SQL, которое использует substr (столбец, 14000), чтобы соответствовать старой длине символа Oracle max 4000.Это хорошо работало с Oracle 11.

Я нахожусь в процессе миграции на новый экземпляр Oracle 18, который использует набор символов AL32UTF8 вместо WE8MSWIN1252.Точно такой же SQL теперь получает:

ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Microsoft][ODBC Driver Manager] Program type out of range {HY003}
ORA-02063: preceding 2 lines from CEAV195

К счастью, у меня нет жестких сроков для решения этой проблемы.

Комментарий: я сейчас получаю

[Ошибка] Выполнение (8: 17): ORA-00997: недопустимое использование типа данных LONG

, несмотря на использование следующего в представлении на стороне SQL Server:

приведение (подстрока (cr.response, 1,2000) как varchar (2000)) ответ

Как я уже говорил ранее, это прекрасно работало с Oracle 11 иНабор символов WE8MSWIN1252.

...