SSIS для L oop ODBC - PullRequest
       110

SSIS для L oop ODBC

0 голосов
/ 23 апреля 2020

Я извлекаю данные из таблицы в Oracle.

У меня есть менеджер соединений ODB C с базой данных Oracle, и запрос на извлечение должен включать предложение where, потому что таблица содержит транзакционные данные, и нет никакой причины извлекать их все время каждый раз.

Я хочу инициализировать таблицу один раз и сделать это с For Loop, который будет выполнять итерацию всей таблицы.

Поскольку это соединение ODB C, я не могу просто поместить предложение where, потому что мне нужно использовать переменную, поэтому я понял, что мне нужно параметризовать задачу DataFlow и написать свой запрос в свойстве sqlcommand, содержащем источник ODB C. Значение свойства:

SELECT * 
FROM DDC.DDC_SALES_TBL 
WHERE trunc(CALDAY) between to_date('"+ @[User::vstart]+"','MM/DD/YYYY') 
and  to_date('"+ @[User::vstop]+"','MM/DD/YYYY')

Где @vstart и @vstop - это переменные, содержащие даты 'from / to', которые должны быть извлечены на основе функции DATEADD и другой переменной (@vcount ), который должен быть итератором следующим образом:

(DT_WSTR, 2) MONTH( DATEADD( "day", @[User::vcount] , GETDATE()  )  )+"/"+
(DT_WSTR, 2) DAY( DATEADD( "day", @[User::vcount] , GETDATE()  )  )+"/"+
(DT_WSTR, 4) YEAR( DATEADD( "day", @[User::vcount] , GETDATE()  )  )

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

Я пометил переменную как EvaluateAsExpression=True

Я также пометил DelayValidation=True в задачах For L oop и DataFlow.

Ошибки:

( 1) Задача потока данных: ошибка: SQLSTATE: HY010, сообщение: [Microsoft] [ODB C Driver Manager] Ошибка последовательности функций; (2) Задача потока данных: ошибка: код ошибки служб SSIS DTS_E_INDUCEDTRANSFORMFAILUREONERROR. «ODB C Source.Outputs [ODB C Source Output]» не выполнен, поскольку произошел код ошибки 0xC020F450, а расположение строки ошибки в «ODB C Source» указывает на ошибку при ошибке. Произошла ошибка в указанном объекте указанного компонента. Перед этим могут быть сообщения об ошибках с дополнительной информацией о сбое. (3) Задача потока данных: ошибка: код ошибки службы SSIS DTS_E_PRIMEOUTPUTFAILED. Метод PrimeOutput на ODB C Источник возвратил код ошибки 0xC0209029. Компонент возвратил код ошибки, когда механизм конвейера вызвал PrimeOutput (). Значение кода ошибки определяется компонентом, но ошибка является фатальной, и конвейер прекратил выполнение. До этого могут быть сообщения об ошибках с дополнительной информацией о сбое.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 25 апреля 2020

Я не знаю, почему изначально я не использовал OLEDB, так как думал, что он не работает. Я попытался создать OLEDB через драйвер oracle, и менеджер соединений работал, поэтому я использовал его. Таким образом, вы можете напрямую параметризовать источник, и l oop работал просто отлично. Не знаю, что является причиной конфликта с источником OBD C, но это мой обходной путь. Я не нашел способа настроить свойство sqlcommand в ODB C source и использовать его в al oop, что должно изменять команду при каждой итерации. Он сломался после первой итерации, независимо от того, что я пытался.

Спасибо,

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