IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement de jobs Discussion :

Talend mettre à jour BDD Oracle avec variable globalMap


Sujet :

Développement de jobs

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    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

  2. #2
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    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.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    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?

  4. #4
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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' "

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    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!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    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.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    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

  8. #8
    Membre averti Avatar de bouvda
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    252
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 252
    Points : 318
    Points
    318
    Par défaut
    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

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    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.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 117
    Points : 67
    Points
    67
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mettre à jour BDD Mysql après modif avec Ajax
    Par stephw57 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/05/2012, 20h32
  2. [AC-2003] Mettre à jour une table avec une variable
    Par nawakbling dans le forum VBA Access
    Réponses: 1
    Dernier message: 02/04/2010, 10h33
  3. Mettre à jour des tables avec un trigger
    Par Titouf dans le forum Langage SQL
    Réponses: 9
    Dernier message: 20/01/2008, 15h57
  4. [ADO.NET][VB.NET]Comment mettre à jour BDD avec DataSet?
    Par fuhraih dans le forum Accès aux données
    Réponses: 1
    Dernier message: 17/01/2006, 16h35
  5. Mettre à jour les if et variable toute les x seconde.
    Par Guillaume602 dans le forum C++
    Réponses: 5
    Dernier message: 06/12/2005, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo