2017-09-06 2 views
0

Nous essayons de remplacer le remplacement du qualificatif source par des jointures définies par l'utilisateur et le filtre source.Jointure définie par l'utilisateur dans Informatica avec DB2

pour ci-dessous défini par l'utilisateur rejoindre en qualification source Informatica:

{A INNER JOIN B ON a.dept_id= b.dept_id 
b.load_date between 20170712174712000000 and 20170904152656000000 
LEFT OUTER JOIN C ON a.emp_id = c.emp_id} 

pour cela, je reçois la requête SQL comme

FROM A,B,C WHERE {A INNER JOIN B ON A.dept_id = B.dept_id 
AND b.load_date between 20170712174712000000 and 20170904152656000000 
LEFT OUTER JOIN C 
ON C ON a.emp_id = c.emp_id} 

J'ai essayé de remplacer INNER JOIN dans la requête override avec NORMAL JOIN, comme je l'ai vu quelque part que informatica traduit la jointure normale à interne. La base de données source est DB2.

Répondre

1

Je ne connais rien à informatica, mais la syntaxe SQL résultante que vous avez listée dans la question n'est pas valide pour DB2. Le plus gros problème est que vous avez le JOIN dans la clause WHERE plutôt que la clause FROM. Pas vraiment sûr de savoir comment résoudre cela dans informatica cependant. Appropriée syntaxe DB2 mais serait quelque chose comme ceci:

FROM a 
    INNER JOIN b ON a.dept_id = b.dept_id 
    LEFT OUTER JOIN c ON a.emp_id = c.emp_id 
WHERE 
    b.load_date BETWEEN 20170712174712000000 and 20170904152656000000 

Cela suppose que b.load_date n'est pas un champ d'horodatage. Si vous utilisez un champ d'horodatage, le format des horodatages doit être '2017-07-12 17:47:12.000000'

0

Le T-SQL doit être utilisé dans la clause FROM et non dans la clause WHERE. D'où utilisation:

FROM A INNER JOIN B ON a.dept_id = b.dept_id 
     LEFT OUTER JOIN C ON a.emp_id = c.emp_id