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 06/08/2007, 16h02   #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]Utiliser une variable de l'input row7.nombre dans un t_oracleRow

Bonjour,

J'ai un OracleInput qui sélectionne la valeur d'un nombre.
Cet input est relié à un t_OracleRow dans lequel je met à jour une table grâce à une routine personnel et à une variable row7.nombre de mon input.

Il n'a pas l'air de reconnaitre cette variable.

Est ce possible 'utiliser une variable d'un row dans un OracleRow?
Voici mon code, il me fait une erreur de syntax sql.


Code :
1
2
3
 
UPDATE T_CO_REF_IDENTIFIANT_TIERS
SET T_CO_REF_IDENTIFIANT_TIERS.CURRENT_NUMBER=IcareConversion.identifiant_suivant_numero(row7.lettre,row7.nombre)

Je pensais sinon à utiliser un javaRow entre les deux,avec l'affectation à une variable mais est ce que je pourrais utiliser la variable de mon input dans le javaRow ?
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 16h09   #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,

normalement un tOracleRow reconnaît les structures qu'il a en entrée. Donc en faisant ainsi :
Code :
1
2
"UPDATE T_CO_REF_IDENTIFIANT_TIERS
SET T_CO_REF_IDENTIFIANT_TIERS.CURRENT_NUMBER=IcareConversion.identifiant_suivant_numero("+row7.lettre+","+row7.nombre+")"
ça devrait fonctionner.
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 16h34   #3
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
Autant pour moi, par défaut les composants t[Base de données]Row ne permettent pas de changer la requête dynamiquement en cours d'exécution (ils connaissent bien les entrées mais ne les évaluent qu'au tout début alors que l'extraction n'a pas encore commencé). Ca fonctionne pour moi car j'avais modifié certains composants.

Voici un tOracleRow modifié qui devrait fonctionner avec la requête que j'ai indiquée : tOracleRow.zip
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 17h16   #4
Nouveau Membre du Club
 
Inscription : juin 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 109
Points : 37
Points : 37
ok, j'ai dezzipé le fichier dans les plugins et les composents talend.
J'ai redémarré mon Talend et j'ai supprimé mon oracleRow et inséré un nouveau.

et voici mon erreur:
Code :
1
2
3
4
5
6
 
Exception IN component tRunJob_1
java.lang.Exception: Exception IN thread "main" java.lang.Error: Unresolved compilation problem: 
	String literal IS NOT properly closed BY a double-quote
 
	at infocentre_eurica.alimentation_tiers_distributeur.alimentation_tiers_distributeur.tOracleInput_1Process(alimentation_tiers_distributeur.java:733)
et en ligne 733 c'est la requête de mon t_oracleRow


Ah depuis la mise à jour il fait une erreur sur tous mes T_OracleRow.....:
String literal is not properly closed by a double-quote
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 17h35   #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
Dans mes autres TOracleRow, j'ai tout mis sur une ligne, je n'ai plus d'erreur de double quote.

Mais dans celui qui prend les variables, il fait une erreur :

Exception in component tOracleRow_6
java.lang.RuntimeException: Execution failure, there might be an error in your SQL syntax.
at infocentre_eurica.alimentation_tiers_distributeur.alimentation_tiers_distributeur.tOracleInput_4Process(alimentation_tiers_distributeur.java:2551)


dans le code j'ai ça:
Code :
1
2
3
4
5
6
7
8
 
pstmt_tOracleRow_6 = conn_tOracleRow_6
.prepareStatement("UPDATE DBADWH.T_CO_REF_IDENTIFIANT_TIERS SET DBADWH.T_CO_REF_IDENTIFIANT_TIERS.CURRENT_LETTER=IcareConversion.identifiant_suivant_lettre("
								+ row7.lettre
								+ ","
								+ row7.nombre
								+ ",'A'),DBADWH.T_CO_REF_IDENTIFIANT_TIERS.CURRENT_NUMBER=IcareConversion.identifiant_suivant_numero("
								+ row7.lettre + "," + row7.nombre + ")");
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 08h47   #6
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
La requête m'a pourtant l'air correcte...
Ne faudrait-il pas des simples quotes autour du premier paramètre des fonctions appelées dans la requête ?
Ce qui donnerait dans le code :
Code :
1
2
3
4
5
6
7
pstmt_tOracleRow_6 = conn_tOracleRow_6
.prepareStatement("UPDATE DBADWH.T_CO_REF_IDENTIFIANT_TIERS SET DBADWH.T_CO_REF_IDENTIFIANT_TIERS.CURRENT_LETTER=IcareConversion.identifiant_suivant_lettre('"
+ row7.lettre
+ "',"
+ row7.nombre
+ ",'A'),DBADWH.T_CO_REF_IDENTIFIANT_TIERS.CURRENT_NUMBER=IcareConversion.identifiant_suivant_numero('"
+ row7.lettre + "'," + row7.nombre + ")");
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h19   #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
Bonjour,


en fait je crois que c'est la routine qu'il n'arrive pas à exécuter car si je mets des données en dur à la place de mes row7.lettre et row7.nombre, ça ne fonctionne pas non plus.

dans mes T_map une routine identique fonctionne.

si ma routine était :
TalendDate.getCurrentDate()

est ce que dans le tOracleRow je devrais mettre pour qu'elle s'exécute?
System.TalendDate.getCurrentDate()


ou faut -t-il mettre la routine en dehors des doubles cotes?
lolotte35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 10h24   #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
Il faut la mettre en dehors des double quotes si c'est une routine définie dans Talend. Le requête deviendrait :
Code :
"UPDATE DBADWH.T_CO_REF_IDENTIFIANT_TIERS SET DBADWH.T_CO_REF_IDENTIFIANT_TIERS.CURRENT_LETTER='"+IcareConversion.identifiant_suivant_lettre(row7.lettre,row7.nombre,"A")+ "', DBADWH.T_CO_REF_IDENTIFIANT_TIERS.CURRENT_NUMBER="+IcareConversion.identifiant_suivant_numero(row7.lettre,row7.nombre)
bouvda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/08/2007, 15h32   #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
merci ça fonctionne mieux.

Bonne journée
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 08h38.


 
 
 
 
Partenaires

Hébergement Web