Короткий ответ: вам нужно конвертировать кодовые страницы, а не типы данных.
Далее следует длинный ответ:
Шаг 0: Если вы еще не используете его, я настоятельно рекомендую вам переключиться на использование соединителей Attunity вместо стандартного соединителя Oracle OLEDB. Вы можете скачать его для SQL2012 от Microsoft по адресу: https://www.microsoft.com/en-us/download/details.aspx?id=29283
Шаг 1. Используя источник Oracle Attunity, вы можете указать команду SQL в качестве режима доступа к данным, а не просто указывать на таблицу.
Шаг 2. Вам необходимо определить точную кодовую страницу, которую использует сервер Oracle, и точную кодовую страницу, которую использует ваш сервер SQL. Для серверов Oracle, использующих набор символов UTF-8, это, скорее всего, AL32UTF8
, а для Windows Server, использующего набор символов ANSI-1252 по умолчанию, кодовая страница - WE8MSWIN1252
.
.
Шаг 3: Напишите ваш запрос plsql и CONVERT
кодовую страницу всех столбцов на стороне Oracle. Убедитесь, что вы используете двойные кавычки вокруг имен столбцов Oracle. Это должно выглядеть примерно так:
SELECT
CONVERT("Data Source Code",'AL32UTF8','WE8MSWIN1252') AS DataSourceCode
,CONVERT("Order#",'AL32UTF8','WE8MSWIN1252') AS OrderNumber
,CONVERT("Invoice#",'AL32UTF8','WE8MSWIN1252') AS InvoiceNumber
,CONVERT("Item#",'AL32UTF8','WE8MSWIN1252') AS ItemNumber
,CONVERT("Order Line Type",'AL32UTF8','WE8MSWIN1252') AS OrderLineType
,CONVERT("Order Status",'AL32UTF8','WE8MSWIN1252') AS OrderStatus
,CONVERT("Order Date",'AL32UTF8','WE8MSWIN1252') AS OrderDate
,CONVERT("Invoice Date",'AL32UTF8','WE8MSWIN1252') AS InvoiceDate
,CONVERT("Ship To Cust#",'AL32UTF8','WE8MSWIN1252') AS ShipToCustNumber
,CONVERT("Billing Account #",'AL32UTF8','WE8MSWIN1252') AS BillingAccountNumber
,CONVERT("Sold Qty",'AL32UTF8','WE8MSWIN1252') AS SoldQty
,CONVERT("Unit Price",'AL32UTF8','WE8MSWIN1252') AS UnitPrice
,CONVERT("Sales Amount",'AL32UTF8','WE8MSWIN1252') AS SalesAmount
,CONVERT("Handling Amount",'AL32UTF8','WE8MSWIN1252') AS HandlingAmount
,CONVERT("Freight Amount",'AL32UTF8','WE8MSWIN1252') AS FreightAmount
FROM MYORACLEDB.DIGITAL_SALES_FEED
WHERE "Invoice Date" >= TO_DATE('2018/08/01', 'yyyy/mm/dd')
Шаг 4: Используйте этот текст запроса как SQL command text
в окне конфигурации Oracle Source.
Интересный факт: Oracle будет возвращать имена столбцов ВСЕХ КАП, независимо от вашего формата AS ColumnName
.
Шаг 5 (необязательно): все столбцы будут возвращены в виде строк. Возможно, вы захотите поместить задачу Data Conversion
в свой поток данных, но если вы просто сбрасываете свои данные в плоский файл, вы можете не заботиться о преобразовании данных. У меня есть десятичные / числовые и даты в моем наборе данных, поэтому я делаю преобразование перед вставкой в SQL Server.