Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Talend
Talend Forum d'entraide sur Talend (Talend Open Studio, ...). Avant de poster --> FAQ Talend, Tutoriels Talend
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/02/2011, 18h44   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 21
Points : 1
Points : 1
Par défaut Composant tOracleInput et une date en paramètre

Bonjour à tous,

J'expose mon problème: Je récupère une date que je mets dans une variable de contexte de type string, et lorsque j'essaie d'utiliser un composant du type tOracleiInput, je me retrouver avec une erreur Oracle :

Code :
1
2
Exception IN component tOracleInput_1
java.sql.SQLException: ORA-01858: a non-numeric character was found WHERE a numeric was expected
J'ai essayé de formater ma date mais rien n'y fait.
Voici la requête passée dans mon tOracleInput :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
"SELECT DISTINCT '" + context.OC1_pid + 
"', SuiviOB.ID_ORGANIZATION , SuiviOB.STD_ID_HR 
FROM
 M4CDC_H_HR_SUIVI_OB SuiviOB , STD_PERSON StdPerson 
WHERE 
  SuiviOB.ID_ORGANIZATION = '" + context.OC1_CodeFonds + "'
  AND  SuiviOB.CDC_PAY_FREQ_PAYM = '" + context.OC1_FreqPaie + "'
  AND  SuiviOB.CDC_DT_PAYMENT = to_date('" + (String)context.OC1_DtEchPaie + "','DDMMYYYY')
  AND  SuiviOB.CDC_DT_ED_BP IS NULL
  AND  StdPerson.STD_ID_PERSON = SuiviOB.STD_ID_HR 
  AND  StdPerson.CDC_ID_COD_PLAGE BETWEEN '" + context.OC1_PlageValMin + "' 
  AND  '" + context.OC1_PlageValMax + "'"
Merci de m'aiguiller.
ntouhami est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 09h30   #2
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Bonjour,

Vu comme ça, le problème peut venir de ces variables en paramètre. Le mieux c'est de les imprimer au moment de l'exécution avant l'appel du toracleinput.

Essaye ça :
Code :
System.out.println(REQUETE);
Mets ce bout de code dans un tJava et exécute le à la place du tOracleInput (ou avant). Pour savoir quelles sont les valeurs réellement transmises en paramètre.

Mais j'ai remarqué aussi le between. Ce n'est pas entre deux valeurs int? Il faudrait peut être enlever les ' Pour éviter les conversions implicites d'oracle lors des comparaisons...
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 09h44   #3
Invité de passage
 
Inscription : juillet 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 21
Points : 1
Points : 1
Le between ne pose pas de problème.

J'ai vu un article disant qu'Oracle faisait une conversion implicite de certains types de données et notamment de String en Date.
Le masque par défaut est dd-MM-yyyy dans Talend.

Je vais essayer en utilisant ce masque.
ntouhami est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h39   #4
Invité de passage
 
Inscription : juillet 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 21
Points : 1
Points : 1
Avec quelques tests simple je m'aperçois que ma variable de contexte ne garde pas la valeur assignée dans mon job. Je ne sais pas comment stocker une variable globale que je garderai après mon job....
ntouhami est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h59   #5
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Il faut voir à quel niveau tu affecte une valeur à ta variable.

Tu peux utiliser le composant tSetGlobalVar. Si tu lance ton job à partir d'un autre job (job père /fils) il ne faut pas oublier de transmettre les variables de contextes.
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 13h59   #6
Invité de passage
 
Inscription : juillet 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 21
Points : 1
Points : 1
Je transmets entre tous les jobs le contexte.

J'affecte ma valeur dans un premier job :
tOracleInput -----> tJava(affectation de la valeur)

Ensuite c'est dans le deuxième job lors de l'affichage de ma valeur que je n'ai rien.
J'ai essayé avec un tSetGlobalVar, mais la portée de la variable ne dépasse pas le job....
ntouhami est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h21   #7
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Si tu affecte la valeur dans un tJava. Fais un System.out.println(variable) avant et après l'affectation pour être sûr que ça passe bien.
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h21   #8
Invité de passage
 
Inscription : juillet 2006
Messages : 21
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 21
Points : 1
Points : 1
Oui l'affectation fonctionne bien (print à l'appui avant et après l'affectation).
C'est une fois en dehors du contexte que je n'ai plus la valeur de la variable de contexte.

Voici le code pour l'affectation :
Code :
1
2
3
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
context.OC1_DtEchPaie = sdf.format(input_row.DT_ECH_PAIE); 
System.out.println("Date d'échéance de paie concernée : "+context.OC1_DtEchPaie);
Ne penses-tu pas que ça vient du fait que j'affecte la référence (et non la valeur) et que ma variable n'a jamais été instanciée auparavant?
ntouhami est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h03   #9
atb
Membre chevronné
 
Homme
Inscription : novembre 2004
Messages : 569
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Autre

Informations forums :
Inscription : novembre 2004
Messages : 569
Points : 696
Points : 696
Comment as-tu déclaré ta variable ?

Le mieux c'est de la rajouter au niveau du référentiel dans contexte (menu à gauche).

Ensuite la rajouter au niveau de chaque job père et fils.

Je t'invite à faire un tour ici :
http://www.talendforge.org/tutorials...lish&idTuto=34

Peux-tu envoyer quelques captures d'écran?
atb est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h02.


 
 
 
 
Partenaires

Hébergement Web