Мне приходилось сталкиваться с подобными проблемами типов данных между 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 системами.