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

  1. #1
    Candidat au Club
    tJava et tOracleInput types de données incohérents ; attendu : DATE ; obtenu : NUMBER
    Bonjour, je débute sur talend ainsi qu'en java. J'ai crée une routine (getInterval(Date maDate, int wow )) qui permet, en fonction d'une date et du numéro de semaine (wow obtenue grâce à getWeek(Date maDate)) de fournir la date de début et de fin de la semaine qui contient cette date, en voici une partie :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ...
    WeekFields week = WeekFields.of(Locale.getDefault());
    LocalDate dateStart = LocalDate.of(y, m, d).with(week.weekOfYear(), wow).with(week.dayOfWeek(), 1);
    LocalDate dateEnd = dateStart.plusDays(6);
    Date debut = java.sql.Date.valueOf(dateStart);
    Date fin = java.sql.Date.valueOf(dateEnd);
    Date[] Interval = {debut ,fin};
    return Interval;


    Ensuite j'effectue la requête du tOracleInput entre ces deux dates comme cela (datrans étant un chaine de caractères ex: 20140721) :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    ...
    where (to_date(datrans, 'yyyy-MM-dd') between "+((Date)globalMap.get("Debut"))+" and "+((Date)globalMap.get("Fin"))+")


    avec dans le tJava :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    globalMap.put("Debut", routines.date.getInterval(TalendDate.addDate(TalendDate.getCurrentDate(),-14,"dd"), routines.date.getWeek(TalendDate.addDate(TalendDate.getCurrentDate(),-14,"dd")))[0]);
     
    globalMap.put("Fin", routines.date.getInterval(TalendDate.addDate(TalendDate.getCurrentDate(),-14,"dd"), routines.date.getWeek(TalendDate.addDate(TalendDate.getCurrentDate(),-14,"dd")))[1]);


    Le but étant d'effectuer le job en semaine S afin d'obtenir les stats de la semaine S-2.

    Mais ça bloque au niveau du tOracleInput, message d'erreur :
    java.sql.SQLSyntaxErrorException: ORA-00932: types de données incohérents ; attendu : DATE ; obtenu : NUMBER
    Auriez vous une idée de comment régler ce problème? ou si vous avez autre chose à me proposer que passer par un tJava je prend!

    Merci par avance pour votre aide. Si besoin je peux fournir plus d'info.

  2. #2
    Membre expérimenté
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    where (to_date(datrans, 'yyyy-MM-dd') between "+((Date)globalMap.get("Debut"))+" and "+((Date)globalMap.get("Fin"))+")
    Pour moi tu devrais formatter ta date et elle la mettre entre-quote. Tu devrais loguer ta requête et la lancer à la main tu t’apercevras qu'elle n'est pas valide
    Pensez à marquer vos tickets comme résolus.
    Pensez aussi aux pour les réponses pertinantes

    Quand une discution est résolue depuis un moment pour revenir dessus, il est mieux d'en crée une nouvelle avec un lien vers l'autre car :
    • Elle sera en haut du forum, elle sera donc plus visible
    • Une discussion résolue, on ne passe pas dessus pour aider, on passe dessus si on a le même problème
    • Tu demandes surement à tes clients de faire le même

  3. #3
    Candidat au Club
    Comme je l'ai notifié je débute, pouvez vous être plus précis svp? J'ai essayer de convertir ma date en string avec DateFormat#format

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    String pattern = "yyyyMMdd";
    DateFormat df = new SimpleDateFormat(pattern);
    WeekFields week = WeekFields.of(Locale.getDefault());
    LocalDate dateStart = LocalDate.of(y, 01, 01).with(week.weekOfYear(), wow);
    LocalDate dateEnd = dateStart.with(week.dayOfWeek(), 7);
    Date debut = java.sql.Date.valueOf(dateStart);
    Date fin = java.sql.Date.valueOf(dateEnd);
    String deb = df.format(debut);
    String f = df.format(fin);
    String[] Interval = {deb ,f};
    return Interval;


    puis modifier ma requête comme cela
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     to_date(datrans, 'yyyyMMdd') between to_date("+(String)globalMap.get("debut")+",'yyyyMMdd') and to_date("+(String)globalMap.get("fin")+",'yyyyMMdd')

    mais j’obtiens l'erreur suivant
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    Exception in component tOracleInput_2 (Copy_of_Copy_of_XMLgenerator)
    java.lang.ClassCastException: java.lang.String cannot be cast to java.util.Date

  4. #4
    Candidat au Club
    J'ai finalement utiliser un tSetGlobalVar au lieu d'un tJava,



    modifié la sortie de ma routine afin d'obtenir des strings:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ... 
    WeekFields week = WeekFields.of(Locale.getDefault());
    LocalDate dateStart = LocalDate.of(y, m, d).with(week.weekOfYear(), wow).with(week.dayOfWeek(), 1);
    LocalDate dateEnd = dateStart.plusDays(6);
    java.sql.Date debut = java.sql.Date.valueOf(dateStart);
    java.sql.Date fin = java.sql.Date.valueOf(dateEnd);
    String deb = df.format(debut);
    String f = df.format(fin);
    String[] Interval = {deb ,f};
    return Interval;


    et ma requête tel que :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    ...
    where datrans between "+((String) globalMap.get("ledebut"))+" and "+((String) globalMap.get("lafin"))+"


    et ça fonctionne! Merci de votre aide.

###raw>template_hook.ano_emploi###