Проблема служб SSIS при связи с Oracle (T-SQL или PL / SQL?) - PullRequest
1 голос
/ 06 октября 2010

У меня настроен пакет служб SSIS для извлечения данных из базы данных Oracle в SQL Server. Недавно я столкнулся с проблемой, препятствующей извлечению данных.

Следующий код прекрасно работает в Oracle SQL Developer (он возвращает строки, как и должно быть):

SELECT a.MyField  ,
    a.MyOtherField,
    a.FromDate
FROM MyTable a
WHERE a.FromDate BETWEEN CONCAT('01-', TO_CHAR(ADD_MONTHS(SYSDATE, -13), 'MON-YY')) AND TO_CHAR(LAST_DAY(SYSDATE), 'DD-MON-YY')

Однако при использовании этого в качестве текста команды SQL компонента «Источник OLE DB» в службах SSIS он не возвращает записей.

Я не уверен, является ли это проблемой служб SSIS или различием в синтаксисе языка (я полагаю, что это связано с синтаксисом даты разных систем, но у меня недостаточно сильного понимания языка PL / SQL, чтобы понять чтобы исправить это.).

Есть идеи?

1 Ответ

2 голосов
/ 06 октября 2010

Скорее всего, проблема в том, что вы сравниваете дату со строкой.Это заставляет Oracle выполнять неявное приведение с использованием сеанса NLS_DATE_FORMAT.Поскольку это зависит от сеанса, он хрупок, поскольку разные клиенты в конечном итоге будут выполнять преобразование по-разному.

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

SELECT a.MyField  ,
       a.MyOtherField,
       a.FromDate
  FROM MyTable a
 WHERE a.FromDate BETWEEN trunc( add_months( sysdate, -13 ), 'MM' ) AND
                          trunc( last_day( sysdate ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...