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 16/07/2007, 10h50   #1
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
Par défaut Talend mettre à jour BDD Oracle avec variable globalMap

Bonjour,

Je souhaiterai mettre à jour une table "journal" dans ma BDD Oracle avec le nombre de lignes insérées par mon tOracleOutput.
J'essaye d'utiliser un tOracleRow avec une requête update, mais je ne sais pas comment passer la variable, voici ma requête ni ne focntionne pas :

"update journal
set NBR_INSERE= ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED"))
where FONCTION ='CHARGEMENT' and TRAITEMENT='CATALOGUE_INTERVENTION'"

J'ai essayé de mettre :
set NBR_INSERE= " & ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED")) &"


mais cela ne focntionne pas mieux...

Peut on utiliser une variable dans une requête SQL?


Merci


Charlotte
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 10h55   #2
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Bonjour,
Citation:
Envoyé par lolotte35
Bonjour,
"update journal
set NBR_INSERE= ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED"))
where FONCTION ='CHARGEMENT' and TRAITEMENT='CATALOGUE_INTERVENTION'"

J'ai essayé de mettre :
set NBR_INSERE= " & ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED")) &"
il faut remplacer les '&' par des '+' et tout devrait fonctionner.
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 11h48   #3
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
Bonjour,

Merci, je n'ai plus d'erreur java, mais il ne mets pas à jour ma variable.
Pourtant lorsque j'ajoute "nbr_modifie='20'" dans l'update, la variable nbr_modifie se met bien à jour.

"update journal
set nbr_insere = " + ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED")) + "
,nbr_modifie='20'
where FONCTION ='CHARGEMENT' and TRAITEMENT='CATALOGUE_INTERVENTION' "

La variable ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED"))
donne 1 normalement dans ma requête.
D'ailleurs en même temps je l'inscris dans un t_system et elle affiche bien "1".

Dans ma table oracle la variable nbr_insere est en "number", est ce que le (Integer) n'est pas compatible?
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 11h57   #4
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Citation:
Envoyé par lolotte35
"update journal
set nbr_insere = " + ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED")) + "
,nbr_modifie='20'
where FONCTION ='CHARGEMENT' and TRAITEMENT='CATALOGUE_INTERVENTION' "
Je remarque que vous utilisez des simples quotes ' pour la valeur de nbr_modifie mais que vous ne les utilisez pas pour nbr_insere.
Le problème peut être causé par cela, essayez donc :
Code :
1
2
3
4
5
 
"update journal
set nbr_insere = '" + ((Integer)globalMap.get("tOracleOutput_1_NB_LINE_INSERTED")) + "'
,nbr_modifie='20'
where FONCTION ='CHARGEMENT' and TRAITEMENT='CATALOGUE_INTERVENTION' "
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 12h08   #5
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
Bonjour,

J'avais ajouté les cotes tout à l'heure ça ne focntionnait pas, il y avait peut être une autre erreur car là je les ai ajouté et ça tourne.

Par contre dans l'update le job s'execute en quelques secondes et avec l'update le job est commencé depuis 5 min et toujours pas fini.

Y a-t-il une façon plus rapide de mettre à jour ma colonne ?

Je verrai en revenant de manger si l'update est fini, je l'espère!
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 12h16   #6
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
Finalement il n'accepte pas les cotes, cela donne une erreur java:

Exception in component tOracleRow_1
java.lang.RuntimeException: Execution failure, there might be an error in your SQL syntax.
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 16h31   #7
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
ouf!
après une journée de test ça fonctionne enfin!
je n'ai pas rajouté les cotes, j'ai laissé la première requête avec les "+" et je devais juste ne pas le relier.

Moi je voulais qu'il se fasse après mon tOracleOutput alors je l'avait relié par un main, mais c'est ça qui l'empêchait de fonctionner.

J'ai donc eu l'idée de le laisser tout seul dans son coin et ça fonctionne!

merci bouvda
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 20h22   #8
Membre éclairé
 
Avatar de bouvda
 
Inscription : octobre 2005
Messages : 252
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2005
Messages : 252
Points : 312
Points : 312
Envoyer un message via MSN à bouvda
Citation:
Envoyé par lolotte35
Moi je voulais qu'il se fasse après mon tOracleOutput alors je l'avait relié par un main, mais c'est ça qui l'empêchait de fonctionner.
Oui c'est logique car un lien main n'indique pas forcément un ordre "temporel" des traitements. Ici la valeur tOracleOutput_1_NB_LINE_INSERTED était donc utilisée sans avoir été correctement affectée au préalable.

Citation:
Envoyé par lolotte35
J'ai donc eu l'idée de le laisser tout seul dans son coin et ça fonctionne!
Un lien Then run entre les premiers composants des chaînes de traitements assurent également un ordonnancement des traitements.

Citation:
Envoyé par lolotte35
merci bouvda
De rien lolotte35
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 11h14   #9
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
J'ai ajouté une note dans la discussion "Talend et les variables globales" où j'ai vu que tu avais répondu bouvda, j'espère que tu sauras encore m'aider.



Sinon pour le lien "run if" il ne fonctionnait pas hier, je vais réessayer avec toutes les modifs qui ont été réalisées.
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 11h42   #10
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
Alors il ne me propose pas "run then" mais "run if", "run if ok" et "run if error".

Avec un "run if" il fait une erreur de "token".
Mais avec un lien "ruin if ok" entre mon tOracleOutput et mon tOracleRow ça fonctionne très bien.


Merci encore
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h13.


 
 
 
 
Partenaires

Hébergement Web