создание пакета служб SSIS с запросом SQL к Oracle - PullRequest
0 голосов
/ 30 августа 2018

У меня было с SQL Server 2012 64 бит!

Я создаю пакет служб SSIS с SQL-запросом к Oracle и пытаюсь поместить файл в плоский файл. Я использую источник Oracle OLEDB и назначение плоского файла для вывода. Локально все работает нормально, но при установке на сервер и запуске через агент SQL я продолжаю получать ошибки Unicode и Non-Unicode!

Последние версии драйверов находятся на сервере, а клиент 11g - на моей машине для разработки. Типы, показанные на каждом шаге, отображаются как DT-STR.

У меня точно такой же источник, который записывает в адрес OLEDB просто отлично. Я не хочу записывать их в таблицу, а затем извлекать их обратно, чтобы заставить это работать. Любые решения? И пожалуйста, не «просто добавьте это» ответы.

Я пробовал преобразование данных, но получаю тот же результат. Пожалуйста, предоставьте ПОДРОБНЫЕ ответы, как здесь, и измените это на это. Картинки никогда не болят. Спасибо

1 Ответ

0 голосов
/ 30 августа 2018

Короткий ответ: вам нужно конвертировать кодовые страницы, а не типы данных.

Далее следует длинный ответ:

Шаг 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 Source

Интересный факт: Oracle будет возвращать имена столбцов ВСЕХ КАП, независимо от вашего формата AS ColumnName.

Шаг 5 (необязательно): все столбцы будут возвращены в виде строк. Возможно, вы захотите поместить задачу Data Conversion в свой поток данных, но если вы просто сбрасываете свои данные в плоский файл, вы можете не заботиться о преобразовании данных. У меня есть десятичные / числовые и даты в моем наборе данных, поэтому я делаю преобразование перед вставкой в ​​SQL Server.

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