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 :

insérer des valeurs dans une table


Sujet :

Développement de jobs

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut insérer des valeurs dans une table
    Bonjour à toutes et à tous,

    Alors voilà j'ai un petit souci pour insérer des valeurs dans une table...

    Au total j'ai 4 tables
    -> T1 qui contient toutes les valeurs (a condition que les colonnes correspondent)
    -> T2 qui contient les valeurs pour un certain cas
    -> T3 qui contient les valeurs pour l'autre cas
    -> T4 qui sert à faire la jonction des 3 autres tables pour pouvoir reconstitué la ligne de départ du fichier

    J'aimerais ajouter les valeurs dans la table T4 mais pour le moment je ne sais pas comment m'y prendre...

    Pour le moment j'ai 3 tOracleinput (une pour chaque table) --- main ---> tmap ------> tOracleOutput

    Le problème c'est que cela ne fonctionne pas comme je le voudrais...
    Actuellement cela me fait (c'est un exemple):
    1 1 0
    1 2 0
    1 3 0
    2 1 0
    2 2 0
    2 3 0
    3 1 0
    ETC...
    Les 0 pour la 3ème colonne sont normaux ^^ car pour le moment il n'y a pas de valeur donc Talend met 0
    (Je n'arrive pas a filtré les valeurs...)

    Hors moi j'aimerais que ce soit, sans que cela se répète, comme cet exemple
    IDT1 | IDT2 | IDT3

    MAIS il faut que cette table permette de reconstitué la ligne de départ du fichier, donc il faut que je fasse un "test" c'est à dire que si la valeur de la colonne de T1 est 10 alors dans T4 celà doit donner (toujours à titre d'exemple):
    IdLigneT1 | IdLineT2 | 0 ou null

    Mais si la valeur est 20 alors cela doit donner:
    IdLigneT1 | 0 ou null | IdLigneT3

    Merci
    Ryuk-

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Personne n'a de solution?? Oo

    Je suis vraiment bloqué je ne sais pas quoi faire...

    J'ai pensé à une autre solution pour faire la même chose, sa consiste a utilisé un fichier temporaire... sauf que je ne peux pas la développer, je suis obligé de faire sans le fichier temporaire et donc utilisé ma base de données directement (de plus de manière de faire sera plus rapide que si j’utiliser un fichier…)

    Je ne sais pas comment faire pour que le Tmap fonctionne comme je le souhaite...

    Je vais tenter une autre explication, au cas où la première serait un peu confuse et en espérant que celle-ci sera meilleur :

    --> T1:
    ID | IDLIGNE | AUTRE CHAMPS
    1 | 10 | ...
    2 | 20 | ...
    3 | 10 | ...
    4 | 10 |...

    --> T2:
    ID | AUTRE CHAMPS
    1 | ...
    2 | ...
    3 | ...

    --> T3:
    1 | ...

    Donc T4 dois ressembler à cela:
    IDT1 | IDT2 | IDT3
    1 | 1 | null ou 0 (peu importe, mais je pense que null serait plus approprié)
    2 | null | 1
    3 | 2 | null
    4 | 3 | null

    Pour réaliser la table cela n'est pas compliqué, tout dépend de "IDLIGNE" qui est dans la table T1, voici en gros la situation:

    Si "IDLIGNE" == 10
    ALORS je prends IDT2
    SINON je prends IDT3

    Bien sur les IDs doivent être différentes, donc prendre l'id suivante...

    Quelqu'un a une idée de comment je peux réaliser cela?
    Utilisation de routine ou non?

    Jérémy

  3. #3
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Au niveau de la sortie du tmap, sur la colonne en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "10".equals(IDLIGNE) ? IDT2 : IDT3

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Salut atb,

    Tout d'abord merci pour ta réponse, mais quand tu dit "au niveau de la sortie du tmap" c'est ou exactement? ^^'

    Pq dans le filtre sa ne marche pas et si je met cela dans les expression sa ne marchera pas... enfin je pense je vais tester

    Mais tu sais exactement ou je dois mettre cela, j'aimerais le savoir sa me fera gagner du temps

    Jérémy

  5. #5
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Fais voir des captures d'écran du job + le tmap, ça sera plu simple

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    C'est bon j'ai trouvé ou le mettre enfin je pense ^^

    j'ai mis cela dans les expressions de sortie du Tmap et Talend me retourne une erreur...

    Voici l'erreur:
    Exception in component tMap_1
    java.lang.NullPointerException
    at projet_ccbo.test_0_1.test.tOracleInput_2Process(test.java:1109)
    at projet_ccbo.test_0_1.test.runJobInTOS(test.java:2087)
    at projet_ccbo.test_0_1.test.main(test.java:1945)
    Je ne comprends pas d'ou peut venir l'erreur...
    Une idée?

    ED1: je vais ajouter des screens pour que vous puissiez m'aider ^^
    ED2:
    "10".equals(T1.RECORDID) ? T2.ID : null
    "20".equals(T1.RECORDID) ? T3.ID : null

    Jérémy
    Images attachées Images attachées  

  7. #7
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Tu fais une opération sur une valeur nulle. Faut voir l'expression et renforcer le tests de valeurs nulles

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Ouais bon bah j'ai compris pourquoi alors ^^.

    Par contre j'ai toujours le même soucis...

    Imagine que j'ai 12 lignes dans ma table T1, et que toutes ces lignes ont un IDLIGNE = 10 ce qui fait donc 12 lignes dans la table T2 et, naturellement, 0 ligne dans la table T3.

    Quand il met ces valeurs dans mon fichier ".csv" (Oui pour le moment je mets mes données dans un fichier au lieu de faire avec ma BDD directement, juste pour le coté pratique..., cela m'évite de vidé ma table a chaque test vu que j'ai des contraintes...) il met les valeurs de cette façon:
    1 | 1 | 0
    1 | 2 | 0
    1 | 3 | 0
    1 | 4 | 0
    1 | 5 | 0
    1 | 6 | 0
    1 | 7 | 0
    1 | 8 | 0
    1 | 9 | 0
    1 | 10 | 0
    1 | 11 | 0
    1 | 12 | 0
    2 | 1 | 0
    2 | 2 | 0
    ETC... jusque
    12 | 12 | 0

    Comment puis-je évité cela?

  9. #9
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    c'est les doublons le problème ?

    Si c'est ça tu peux soit:

    - Mettre un distinct dans la requête SQL utilisée pour récupérer les données de la table T1

    - Utiliser un composant uniqueRow entre le tmap et la table T1, avec clé l'IDLIGNE


    EDIT: Je viens de voir la capture d'écran. Etant donné que tu n'a pas mis de jointure entre les différentes tables dans le tmap, cela veut dire que ça génère un produit cartésien. Donc le résultat obtenu est correcte.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Bah c'est justement la "table" test du tMap (T4) qui va faire les jointures avec mes autres tables...

    Maintenant, je ne voit pas trop comment je pourrai faire de jointure là...

    c'est les doublons le problème ?
    Et bien si tu parle de doublon dans ma table, il n'y en a pas (idem dans les 2 autres ^^). Par contre si tu par là tu veux parler du produit cartésien qu'il réalise, oui c'est la le problème.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Je viens de tester le tUniqRow en utilisant l'IDLIGNE mais cela ne change rien par contre si je met en fonction du RECORDID (Cf. sanstitre.png) là il me fait presque ce que je demande.

    C'est à dire qu'il fait cela (rien de tel qu'un exemple pour expliquer simplement ^^):
    1 | 1 |0
    1 | 2 |0
    ETC...
    1 | 12 |0

    Il ne manque plus que la première colonne a modifier mais bon... je pense pas que le tUniqRow soit vraiment la solution de mon problème... car j'ai réalisé d'autre test et je me rapproche un peu de la solution mais je pense que j'en suis encore loin...

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Bonjour à toutes et à tous,

    Etant donnée que je n'arrive pas à faire de que je veux avec cette méthode, j'ai réfléchis pour faire la même chose avec une autre solution ^^.

    J'ai finalement trouver... maintenant il me reste plus qu'à développer et voir ce que ça donne .

    La solution est la suivante:

    J'ai tout simplement une table qui va gérer les ids pour mes tables.
    Je m'explique, par défaut la TID possède les valeurs 1 pour chaque colonne. J’utilise l'id pour faire mes INSERT dans mes tables mais aussi dans ma table T4.

    Avec cette méthode j'obtiens l'ID avant de faire mes INSERT et je suis sûr que les tables resteront cohérente dans le cas où quelqu'un ferait des modifications en DB ou autre (problème de DB, Modification d'une tierce personne, etc....)

    Ensuite je fais juste un update de TID et le tour est joué, je pense que cette solution est meilleur mais également plus simple à mettre en place.

    atb, je te remercie tout de même pour ton aide précieuse qui m'a permis d'avancer même si je n'ai pas su aller jusqu'au bout de ma première solution.

    Jérémy

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Bonjour à toutes et à tous,

    Actuellement je suis bloqué avec mon tMap et ma variable qui doit augmenter de 1 à chaque fois.

    Je vous ai mis en pièce jointe le screen de mon job.

    La première partie, les deux premières zones, récupère la dernière ID actuelle et "réserve" les id nécessaire pour les futurs insertions.

    Le sous-job en dessous, fait les inserts.
    Sauf que je ne sais pas comment faire pour incrémenter ma variable dans le tMap.
    De cette façon je peux gérer moi-même les ids.

    Est-ce que quelqu'un a une idée?

    ED: Le nom du composant tOracleInput est selectT5Value et non selectT4Value

    Merci
    Ryuk-
    Images attachées Images attachées  

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 73
    Points : 34
    Points
    34
    Par défaut
    Juste pour vous tenir au courant j'utilise une routine dans un de mes tMap, cela fonctionne très bien .

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

Discussions similaires

  1. [MySQL] Insérer des valeurs dans une table
    Par geeka dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 28/04/2015, 11h53
  2. insérer des valeurs dans une table sql via visual studio
    Par le sportif dans le forum VB.NET
    Réponses: 2
    Dernier message: 19/04/2014, 10h17
  3. [11gR2] Procédure générique pour insérer des valeurs dans une table
    Par bibi_obs dans le forum PL/SQL
    Réponses: 7
    Dernier message: 29/03/2013, 11h18
  4. insérer des valeur dans une table via un formulaire
    Par horkets dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 18/07/2008, 20h47
  5. Macro - Ecrire des valeurs dans une table
    Par gojaru dans le forum Access
    Réponses: 2
    Dernier message: 17/08/2006, 13h54

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