2015-02-26 2 views
1

Я пытаюсь создать поток для извлечения данных из таблицы Oracle в таблицу SQL Server. Я посылаю следующий запрос к Oracle, чтобы получить данные:SSIS и отправка запроса с датой в Oracle

select distinct CHLD.id, 
     nvl(chld_c_spl, 'N'), 
     to_char(chld_d_start, 'YYYY-MM-DD') chld_d_start, 
     to_char(chld_d_end, 'YYYY-MM-DD') chld_d_end 
    from child chld, 
     picture ptct 
where CHLD.id = PTCT.chld_id 
    and nvl(chld_d_end, sysdate) >= to_date('01-JAN-2014') 
    and chld_c_veri in ('HC','DR') 
    and nvl(ptct_term, ptct_end) >= to_date('01-JAN-2014') 

Когда я запускаю запрос в Oracle, я получаю 505 возвращаемых строк. Когда я выполняю пакет SSIS, вставлено 1,504 строки. По какой-то причине похоже, что SSIS-запрос запроса не ищет предложение where для таблицы ptct (nvl (ptct_term, ptct_end)> = to_date ('01 -JAN-2014 ')), поскольку все дополнительные строки являются строками, которые не имеют действительной записи в таблице рисунка (ptct).

У кого-нибудь есть совет относительно того, что здесь происходит? Первоначальный запрос использовал предложение exists в таблице ptct вместо соединения, но он не работал, поэтому я преобразовал его в соединение. Когда существовало условие существования, аналогичные результаты были видны описанным выше.

+0

Можете ли вы немного расширить свой пакет SSIS? Когда вы отправляете запрос в oracle, выполняете ли вы это с помощью задачи Execute SQL Task, задавая конкретную строку соединения для вашей базы данных Oracle? Или вы используете источник OLEDB? Вы отправляете результаты или просматриваете промежуточную область при выполнении своего пакета? – Phoenix

+0

Я использую задачу потока данных с источником OLE DB, используя диспетчер соединений Oracle. Менеджер соединений Oracle использует Oracle Provider для OLE DB, а db определяется в файле tnsnames.ora. Режим доступа к данным = команда SQL и текст команды SQL = запрос выше. Затем я просто отправляю его в ADO NET Destination, который является подключением SQL Server непосредственно в таблицу с 4 столбцами в запросе. – scottr

ответ

1

Скорее всего, ваши настройки NLS различаются между вашим инструментом запросов Oracle (sqlplus, toad ...) и SSIS. Попробуйте указать вашу дату явно, как to_date ('2014-01-01', 'YYYY-MM-DD').

select distinct CHLD.id, 
     nvl(chld_c_spl, 'N'), 
     to_char(chld_d_start, 'YYYY-MM-DD') chld_d_start, 
     to_char(chld_d_end, 'YYYY-MM-DD') chld_d_end 
    from child chld, 
     picture ptct 
where CHLD.id = PTCT.chld_id 
    and nvl(chld_d_end, sysdate) >= to_date('2014-01-01','YYYY-MM-DD') 
    and chld_c_veri in ('HC','DR') 
    and nvl(ptct_term, ptct_end) >= to_date('2014-01-01','YYYY-MM-DD') 
+0

Удивительный! Спасибо, Атилла, это сработало. Я отвечу на ваш ответ через пару минут, когда это позволит мне. – scottr