Ошибка переменной SSIS между SQL Server и ORACLE - PullRequest
0 голосов
/ 20 сентября 2018

Добрый день, все, я потратил около 6 часов, пытаясь заставить форматирование работать через SSIS, используя переменную Max Date для определения в предложении where - Просто не повезло!

Я создал переменную с именемmy_date, которая выбрала значение Max (Date) из таблицы локального сервера SQL, чтобы понять последнюю точку загрузки для этой таблицы, используя следующий код:

SELECT        CAST(FORMAT(MAX(Business_Date), 'dd-MMM-yyyy') AS varchar) AS my_date FROM Table

. Правильно выбирается дата 17-Sep-2018.

Затем я сопоставил свой результирующий набор как my_date -> User :: max_date

Я установил для моей переменной max_date строковый тип данных в области действия пакета.

IЯ проверил мою переменную, используя точки останова, чтобы убедиться, что она проходит в правильном формате - и это работает на 100%.

Затем у меня запускается задача потока данных, чтобы извлечь данные из моей базы данных ORACLE и вставитьв мою таблицу SQL Server, которая содержит следующую команду SQL:

SELECT *
FROM            Table2
WHERE        (BUSINESS_DATE > to_date('@[User::max_date]', 'DD-MON-YYYY'))

Однако я получаю ошибку ORA-01858 - [TABLE]: код ошибки SSIS DTS_E_OLEDBERROR.Произошла ошибка OLE DB.Код ошибки: 0x80040E07.Доступна запись OLE DB.Источник: «Поставщик Microsoft OLE DB для Oracle». Hresult: 0x80040E07 Описание: «ORA-01858: был обнаружен нецифровый символ там, где ожидалось число».

Если я пойду и заменю свою переменную непосредственно насодержимое переменной, отображаемой точкой останова в локалях, работает отлично!

Я попытался использовать несколько типов форматов от первоначального экспорта до конечного предложения where, и это, похоже, самое близкое к нему толкание.но он все еще жалуется на формат.

Пожалуйста, помогите - изображения ниже, чтобы помочь увидеть настройки.

Поток управления - отображение выполнения SQL и задачи потока данных

Язык, показывающий, что переменная вставляется после достижения точки останова

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Удалось заставить его работать!

Добавив промежуточную переменную, в которой значение и выражение содержит следующее:

"SELECT        *
FROM            TABLE
WHERE        (BUSINESS_DATE > to_date('"+@[User::max_date]+"' , 'DD-MON-YYYY'))"

Затем я изменил свой исходный OLEDB в команду SQL из переменной ивыбрал созданную выше переменную, и она отлично заработала!

0 голосов
/ 20 сентября 2018

Попробуйте сопоставить пользовательский параметр в «Редакторе источника данных OLE DB» в разделе «Параметры».

1) Измените текст команды SQL (измените @ [User :: max_date] на?), Например, так::

SELECT *
FROM            Table2
WHERE        (BUSINESS_DATE > to_date('?', 'DD-MON-YYYY'))

2) Затем в редакторе параметров сопоставьте параметр 1 с @ [User :: max_date].https://docs.microsoft.com/en-us/sql/integration-services/data-flow/map-query-parameters-to-variables-in-a-data-flow-component?view=sql-server-2017

Кроме того, «Поставщик Oracle для OLE DB» ведет себя не так, как «Поставщик Microsoft OLE DB для Oracle», поэтому он зависит от того, что вы используете.

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