Как изменить DT_STR на DT_WSTR по умолчанию в SSIS для Oracle источника - PullRequest
1 голос
/ 22 января 2020

У нас есть пакет служб SSIS на нашей виртуальной машине (предположим, что это VM1), где мы получаем данные из источника Oracle. Тип данных в Oracle для столбца - Varchar2, а в SSIS он использует тип данных DT_WSTR и сохраняет данные в виде столбца NVarchar. Когда я открываю один и тот же пакет из другой виртуальной машины (предположим, что это VM2), пакет SSIS получает тип данных DT_STR, и пакет завершается с ошибкой из-за ошибки преобразования на этапе проверки пакета SSIS. Я также получаю предупреждение, которое вставляется ниже, когда я нажимаю на столбцы в Задаче потока данных Oracle исходного пакета служб SSIS.

Предупреждение - не удается получить информацию о кодовой странице столбца из OLE DB поставщик. Если компонент поддерживает свойство DefaultCodePage, будет использоваться кодовая страница из этого свойства. Измените значение свойства, если текущие значения строковой кодовой страницы неверны. Если компонент не поддерживает это свойство, будет использоваться кодовая страница из идентификатора локали компонента.

У нас установлены клиенты Oracle Java (JDK) и Oracle на обеих VM1 и VM2. На наших виртуальных машинах установлена ​​ОС Windows 7, а пакеты служб SSIS - Visual Studio 2013 на обеих виртуальных машинах.

1 Ответ

0 голосов
/ 24 января 2020

Мне приходилось сталкиваться с подобными проблемами типов данных между Oracle и службами SSIS. А поскольку службы SSIS очень привередливы в отношении типов данных, мне пришлось найти решение для реализации на стороне Oracle.

Прежде чем объяснять свой ответ, я должен упомянуть, что я использую соединители Attunity для Oracle из Microsoft. Я настоятельно рекомендую использовать эти соединители поверх стандартных соединителей Microsoft и Oracle.

Итак, с учетом сказанного я обнаружил два метода, которые, кажется, работают для передачи данных в правильной кодировке. SSIS действительно плохо читает и переводит метаданные из системы Oracle, но явного CASTing в VARCHAR2, даже если столбец уже является VARCHAR2, похоже, достаточно подсказки, чтобы SSIS знал, что столбец будет иметь тип DT_STR. Во всех моих задачах Oracle Source я использую команду SQL, а не просто выбираю таблицу ( это лучшая практика ), и это позволяет мне добавлять CAST в запрос. Для столбца VARCHAR2 я бы сделал что-то вроде этого:

SELECT CAST("PO Number" AS VARCHAR2(30)) AS "PONumber" FROM TABLE1

Обычно этого будет достаточно. Но иногда этого не произойдет, потому что Oracle допускает некоторые странные символы в столбце VARCHAR2. Если вы видите ошибку [Oracle Source [2345]] Error: OCI error encountered. ORA-29275: partial multibyte character даже после простоты CASTing вашего столбца в VARCHAR2, это происходит из-за несоответствия кодовой страницы. Чтобы исправить это, вы можете конвертировать кодировку строки следующим образом:

SELECT CONVERT("PO Number",'AL32UTF8','WE8MSWIN1252') AS "PONumber" FROM TABLE1

AL32UTF8 - это кодировка по умолчанию (Unicode), которую использует Oracle, а WE8MSWIN1252 - по умолчанию (ASCII 1252). ) кодирование, используемое Windows системами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...