2010-10-06 12 views
1

J'ai un package SSIS configuré pour extraire des données d'une base de données Oracle dans SQL Server. J'ai récemment rencontré un problème qui empêchait cette extraction de données.Problème SSIS lors de la communication avec Oracle (T-SQL ou PL/SQL?)

Le code suivant fonctionne très bien dans Oracle SQL Developer (il renvoie des lignes, comme il se doit):

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') 

Cependant, lorsque vous utilisez ce que le texte de commande SQL d'un composant OLE DB Source dans SSIS, il ne renvoie aucun enregistrement. Je ne sais pas s'il s'agit d'un problème SSIS ou d'une différence dans la syntaxe du langage (je crois que cela est dû à la syntaxe de la date des différents systèmes, mais je n'ai pas une connaissance suffisante de PL/SQL pour le savoir). comment corriger cela.).

Des idées?

Répondre

2

Très probablement, le problème est que vous comparez une date à une chaîne. Cela oblige Oracle à effectuer une distribution implicite à l'aide de NLS_DATE_FORMAT de la session. Comme il s'agit d'une session spécifique, elle est fragile, car les clients finiront par faire la conversion différemment.

Vous êtes certainement mieux réécrire la requête afin de comparer une date à d'autres dates, à savoir

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)) 
+0

Fonctionne parfaitement ... Merci! – Sesame