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

ODI (ex-Sunopsis) Discussion :

Interface : Insertion avec un champs auto incrémenté


Sujet :

ODI (ex-Sunopsis)

  1. #1
    Membre régulier
    Homme Profil pro
    à la recherche d'un stage de fin de formation dans le décisionnel
    Inscrit en
    Juillet 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : à la recherche d'un stage de fin de formation dans le décisionnel

    Informations forums :
    Inscription : Juillet 2002
    Messages : 154
    Points : 85
    Points
    85
    Par défaut Interface : Insertion avec un champs auto incrémenté
    Bonjour

    Dans une interface ODI, je souhaite alimenter une table (maTableCible) avec un champ entier qui s'incrémente à chaque insertion,
    monChampAuto

    j'ai créé une séquence sous oracle S_MonChampAuto

    au moment de maping, j'ai appelé ma séquence oracle avec la syntaxe suivante
    monShema.S_MonChampAuto.NEXTVAL

    mais au moment de l'exécution, je reçois une erreur : du IKM au moment d'insertion :
    Insert flow into I$ table
    je précise que j'ai mis le maping sur la cible avec l'option Insert uniquement

    Comment utiliser des séquences Oracle avec ODI, serait il mieux d'utiliser les séquences d'ODI ?

    Merci à vous

  2. #2
    Membre habitué
    Profil pro
    Consultant informatique
    Inscrit en
    Mars 2003
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2003
    Messages : 132
    Points : 199
    Points
    199
    Par défaut
    Donne nous la trace de l'erreur (double click sur le step en erreur dans operator)

  3. #3
    Membre régulier
    Homme Profil pro
    à la recherche d'un stage de fin de formation dans le décisionnel
    Inscrit en
    Juillet 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : à la recherche d'un stage de fin de formation dans le décisionnel

    Informations forums :
    Inscription : Juillet 2002
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    Bonjour

    Merci pour votre réponse

    le message d'erreur est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    911 : 42000 : java.sql.SQLException: ORA-00911: caractère non valide
     
    java.sql.SQLException: ORA-00911: caractère non valide
     
    	at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
    	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:316)
    	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:282)
    	at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:639)
    	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:185)
    	at oracle.jdbc.driver.T4CPreparedStatement.execute_for_rows(T4CPreparedStatement.java:633)
    	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1086)
    	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:2984)
    	at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3057)
    	at com.sunopsis.sql.SnpsQuery.executeUpdate(SnpsQuery.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execStdOrders(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSqlI.treatTaskTrt(SnpSessTaskSqlI.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java)
    	at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java)
    	at com.sunopsis.dwg.cmd.DwgCommandSession.treatCommand(DwgCommandSession.java)
    	at com.sunopsis.dwg.cmd.DwgCommandBase.execute(DwgCommandBase.java)
    	at com.sunopsis.dwg.cmd.e.i(e.java)
    	at com.sunopsis.dwg.cmd.g.y(g.java)
    	at com.sunopsis.dwg.cmd.e.run(e.java)
    	at java.lang.Thread.run(Unknown Source)
    pour la tâche il y a cette erreur aussi : Insert flow into I$ table


    Merci

  4. #4
    Membre habitué
    Profil pro
    Consultant informatique
    Inscrit en
    Mars 2003
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2003
    Messages : 132
    Points : 199
    Points
    199
    Par défaut
    Bonjour,

    Je ne pense pas que ton erreur vienne de ta séquence.
    Une séquence est normalement mappé en cible. (option à choisir dans les propriété en cliquant sur le champ)
    C'est à dire ne s'exécute que dans la phase insert new row.
    Cependant au vu de ta trace l'erreur ne vient pas de la !
    Pour débugger mes interfaces voila comment je procede :
    je recopie la requête du step et je l’exécute dans un requêteur sql à part comme sqldevelopper, squirrel ou dbvisualiseur.
    je regarde si ça vient du mapping (remplacer le contenu de select par *)
    ou des jointure et filtre (enlever tout ce qui a dans le where)
    Ensuite je procède par élimination et je peux retrouver quel est l'expression qui pose problème !

  5. #5
    Membre régulier
    Homme Profil pro
    à la recherche d'un stage de fin de formation dans le décisionnel
    Inscrit en
    Juillet 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : à la recherche d'un stage de fin de formation dans le décisionnel

    Informations forums :
    Inscription : Juillet 2002
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    bonsoir

    j'ai essayé de faire comme tu as proposé,


    j'ai découvert un premier problème dans la clause where :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where T.CHAMP_CIBLE	= SHEMACIBLE.MA_SEQUENCE. NEXTVAL
    j'ai pu détourner ce problème en décochant la case : "Mapping Actif"
    sauf que pour la nouvelle requête générée, j'ai un
    sans rien entre les deux ce qui est ( je pense ) à l'origine du problème.

    ne faut il pas changer d'IKM par hasard ?

    j'utilise "IKM Oracle Incremental Update" mais j'ai remarqué qu'il en existe d'autre.

    Merci

  6. #6
    Membre habitué
    Profil pro
    Consultant informatique
    Inscrit en
    Mars 2003
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2003
    Messages : 132
    Points : 199
    Points
    199
    Par défaut
    ok
    - le champs contenant la séquence doit être mappé en cible (et seulement en insert)
    Actuellement ton KM vérifie si la séquence = au champs cible ! ce n'est pas correct puisque la séquence s’incrémente à chaque nextval !
    - L'erreur peut aussi venir du fait que tu utilise une clé pour l'update (les champs que ODI utilise pour savoir si c'est une nouvelle ligne ou non)
    tu n'est pas obligé de définir la même clé que la clé primaire de la table !
    Dans ton cas, ça ne peut pas être la séquence la clé d'update ^^

    Pour définir la clé d'update tu peux le faire de 2 facons :
    -en créent une clé unique dans le datastore (dans les modèle) et sélectionner cet clé dans les propriété du datastore cible dans l'interface
    - en sélectionnant un à un les champs qui compose la clé dans l'interface (dans le datastore cible) et cocher pour ces champs "clé".

    Pour IKM ça dépend de ce que tu veux faire,
    Si tu ne fais que des insert l'IKM sql control append est mieux adapté.
    si tu fais des insert et des update, l'ikm incremental update est pour toi !

    J'espère que c'est assez clair. ^^

  7. #7
    Membre régulier
    Homme Profil pro
    à la recherche d'un stage de fin de formation dans le décisionnel
    Inscrit en
    Juillet 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : à la recherche d'un stage de fin de formation dans le décisionnel

    Informations forums :
    Inscription : Juillet 2002
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    Merci kisskool45 pour tes explications, ça explique beaucoup de points,

    j'ai fait ce que tu as proposé, mais j'ai toujours un problème, pour l'exécution de l'interface, mais en vérifiant la requête ça marche sans problème : nombre de ligne insérée est bon,
    sauf que j'arrive pas à retrouver ces lignes avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from I$_MON_INTERFACE
    j'ai supprimé la partie d'insertion, et j'ai exécuté que la partie de sélection et j'ai eu le résultat qui devrait être inséré

    as tu une autre piste à vérifier ?

    NB : sur l'erreur d'exécution, je reçois la même erreur : 911 : 42000 : java.sql.SQLException: ORA-00911: caractère non valide



    j'ai essayé d'effectuer un test manuel,
    1) renommer la table I$... pas test
    2) changer la requête pour avoir un Insert Into test au début
    3) en exécutant tout s est bien passé, et mes lignes ont été insérée.

    ça limite le problème au IKM ( je pense )

    Merci de ton aide.

  8. #8
    Membre régulier
    Homme Profil pro
    à la recherche d'un stage de fin de formation dans le décisionnel
    Inscrit en
    Juillet 2002
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : à la recherche d'un stage de fin de formation dans le décisionnel

    Informations forums :
    Inscription : Juillet 2002
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    voilà enfin j'ai pu découvrir ma connerie,
    ça marche maintenant,

    mon problème c'est que j'avais pas annulé le contrôle ( CKM ) sur le chef primaire ( qui reçois la séquence ), je l'avais enlevé juste pour le IKM.

    Merci kisskool45 pour ton aide et tes explications

    ( mon aventure avec ODI risque de durée encore un peu, donc y aura surement d'autres messages sur le forum )

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 20/06/2012, 13h07
  2. Réponses: 4
    Dernier message: 22/04/2011, 17h50
  3. Réponses: 1
    Dernier message: 23/07/2007, 20h57
  4. Problème de mise à jour des champs Auto incrémentés avec VB6.
    Par NHenry dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/05/2007, 16h06
  5. Champ auto incrémenté avec MyBase
    Par selmak7 dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/04/2007, 10h46

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