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 :

type text de sqlserver vers oracle ?


Sujet :

ODI (ex-Sunopsis)

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut type text de sqlserver vers oracle ?
    Bonjour à tous !

    j'importe des données de sqlserver vers oracle.

    En source j'ai un grand champ texte de type "text" et je voudrai l'importer dans oracle.

    J'ai essayé en faisant un cast vers varchar2 mais ça ne marche pas.
    J'ai également essayé en faisant un to_clob de mon champ mais sans succès.

    Quelqu'un sait-il comment faire ?

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    j'ai réussi à obtenir un truc mais ce n'est pas vraiment satisfaisant

    en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cast(mon_champ, varchar)
    j'obtiens juste une partie de l'info contenue en source

    C'est bien du type clob qu'il me faudrait en cible ?

  3. #3
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Hello,

    Si du cote de SQL Server tu casts en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cast(monChampText as varchar(max))
    tu devrais par la suite pouvoir traiter cette information sans perte de donnees depuis la source.

    Par contre du cote de la cible, bonne question.
    Je connais pas trop Oracle. Le CLOB semble correspondre au besoin d'apres la description du datatype.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    Salut Ptit_Dje

    j'ai essayé ce que tu me propose de deux manières :

    1) en creant une table oracle dand laquelle je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cast(mon_champ, varchar(max))
    mais ça ne marche pas à cause du mot "max"
    Quand je mets varchar(300) ça passe mais toujours avec une perte de données.

    2) en creant une table sqlserver dans laquelle je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cast(mon_champ, varchar(max))
    là ça ne passe pas non plus et en retirant le max ça ne passe toujours pas.

    Visiblement je peux jouer sur la taille du varchar mais sans mettre le mot clé "max"

  5. #5
    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
    As tu essayer de mettre directement le champs de type text de Sql server directement dans un champs de type Clob ?
    Logiquement si le type correspondant a text dans oracle c'est Clob tu n'a pas besoin d'effectuer de transformation.
    (Après je n'ai jamais eu besoin d'utiliser de champs text, je n'y mettrais pas ma main au feu)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    oui j'ai essayé et ça ne marche pas.

    ODI m'affiche une petite bulle jaune "risque de troncature: colonne cible plus petite que colonne source"

    je lance quand même l'interface et et elle plante

    La même manip avec le type blob me donne le même résultat.

  7. #7
    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
    donnes un peu plus de détail :
    -a quel étape ca plante ?
    -quel version de sql server tu utilise
    -donne le script sql de l'étape ou ca plante
    -si c dans l'insertion dans la table temporaire qu'odi cré donne aussi le script de creation de table.
    -Décri ton flux (si tu utilise un workspace diffèrent de la cible, KM utilisé ect..)

    au passage essaye avec convert(VARCHAR(MAX),Monchamptext) du coté sql server

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    Je crée une table oracle en donnant à mon champ texte le type "CLOB"

    • J'utilise l'IKM "SQL control append"

    • Le flux plante dés la deuxième étape c'est à dire au chargement des données dans la worktable.

    • Mon espace de travail se trouve dans Oracle (ma cible).

    • Le script de création de la table temporaire par contre je vois pas où je peux le trouver




    La transformation de mon champ text de sqlserver en varchar c'est bien dans une table oracle que vous me conseillez de la faire ?

    Car pour l'instant j'essaye également de faire dans une table oracle (avec MonchampTXT en varchar2) la fonction CONVERT ou CAST mais je me fais jeter avec le mot clef max (varchar(max) ) car l'expression sur le SGBD n'est pas valide. Par contre avec varchar(3000) par exemple ça passe mais avec perte d'information.

    Il faudrai que je crée une table dans SQLSERVER pour convertir mon champ texte en varchar puis créer une table oracle pour transferer mon champ varchar en varchar2 d'oracle ?

  9. #9
    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
    Pour récupérer le SQL généré par ODI :
    Tu va dans operator, tu peux y voir les info d'exécution
    quand tu double clik sur une étapes tu obtiens les infos de cet étape qui s'ouvre dans une nouvelle fenêtre, et en navigant dans les onglet tu devrais trouver le sql généré par ODI

    Si je t demandais la requête de création de la table c pour vérifier quel est le type qu'odi met pour ton champs. (dans la table de travail bien sur)
    parce que ca ressemble beaucoup a une erreur que j'ai déjà rencontré.
    essaye de mettre comme espace de travail sql serveur.

    La fonction que je t proposée ne fonctionne que sur Sql server pas sur oracle. soit bien sur qu'elle est exécuté en cible et pas sur l'espace de travail.
    J'vais essayer d'installer sql server express pour voir ca plus facilement.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    merci kisscool

  11. #11
    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
    malheureusement je n'aurais pas le temps de m'en oqp aujourd'hui .

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    Pas de souci kisscool

    je n'y arrive toujours pas de mon coté mais j'ai plein d'autre problème à régler sur ODI (notamment des problèmes de compteur...).

    Si j'arrive à résoudre le problème entre temps quand même je viendrai poster ma soluce.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    apparemment le passage au type clob avec oracle est pas si facile selon une personne du forum du labeldecisionnel.com

    il faudrait ajouter dans topology la propriété SetBigStringTryClob de la connexion jdbc et la mettre à TRUE.

    C'est ce que j ai fais comme un grand (cf image jointe) puis j ai appliqué ma fonction:
    mais rien à faire, l'interface plante à la troisiéme étape (load)

    à suivre...

  14. #14
    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
    Bien de mon coté je m'y suis penché aujourd'hui,
    la solution que j'ai trouver c d'utiliser le LKM sql to sql (Jython)
    du coté oracle j'ai mis comme type de champs CLOB
    du coté sql server text

    pas besoin de faire quoi que ce soit dans le mapping tu met simplement TonchampText .
    voila !
    essaye ca , hesite pas a revenir si ca ne marche pas.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    j'étudie en alternance et je suis rentré à l'école

    je reprend mon poste en entreprise dans 15 jours, je te tiens au jus.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    j'ai fais comme tu m'as dit et ça ne marche pas

    LKM : SQL to SQL jython
    IKM : SQL control append

    l'interface plante au niveau de la collecte des données (ODI m'annonce au départ dans le mapping qu'il y a un risque de troncature car champ cible plus petit que champ source)

    Voici le message d'erreur de l'onglet execution :
    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
    org.apache.bsf.BSFException: exception from Jython:
    Traceback (innermost last):
      (no code object) at line 0
    SyntaxError: ('invalid syntax', ('<string>', 14, 58, ' readTrg =  stmtTrg.executeQuery("select * from UPAR000."C$_0description" where 1=2")    '))
     
    	at org.apache.bsf.engines.jython.JythonEngine.exec(JythonEngine.java:146)
    	at com.sunopsis.dwg.codeinterpretor.k.a(k.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.scripting(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSqlC.treatTaskTrt(SnpSessTaskSqlC.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.h.y(h.java)
    	at com.sunopsis.dwg.cmd.e.run(e.java)
    	at java.lang.Thread.run(Thread.java:619)

  17. #17
    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
    ca ca veut dire que tu as surement des caractère speciaux dans ton champs text (du style \n )
    En a tu besoin ?
    Sinon tu les enleve et tu n'aura plus ce probleme
    Si oui la je ne sais pas encore ...
    peut etre diviser en plusieurs varchar

  18. #18
    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
    attend j'avais suposer que tu avais le meme probleme que j'ai rencontrer mais en fait non
    il s'agit juste de la requete select * from UPAR000."C$_0description" where 1=2
    qui ne s'execute pas correctement
    je pense que c surement du au ""
    je verifie

  19. #19
    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
    as tu m'y sql server en espace de travail ?

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 90
    Points : 43
    Points
    43
    Par défaut
    jusque là j'avais mis mon espace de travail sur Oracle avec le LKM sql to sql(jython)

    la je viens de mettre l'espace de travail sur sqlserver et je ne peux plus choisir de LKM (je lance quand même l'interface )

    L'interface plante à l'étape d'intégration: insert news rows et j'ai le code suivant :

    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
     
    java.lang.NumberFormatException: For input string: "4294967295"
    	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    	at java.lang.Integer.parseInt(Integer.java:461)
    	at java.lang.Integer.parseInt(Integer.java:499)
    	at oracle.jdbc.driver.OracleResultSetMetaData.getPrecision(OracleResultSetMetaData.java:303)
    	at com.sunopsis.sql.SnpsQuery.getResultSetParams(SnpsQuery.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.getTargetOrderMetaData(SnpSessTaskSql.java)
    	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execCollOrders(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.h.y(h.java)
    	at com.sunopsis.dwg.cmd.e.run(e.java)
    	at java.lang.Thread.run(Thread.java:619)

Discussions similaires

  1. Migration script SQLServer vers Oracle
    Par toulouseadr dans le forum Oracle
    Réponses: 1
    Dernier message: 04/01/2013, 15h47
  2. Serveur lié vers de SQLSERVER vers ORACLE
    Par nabou dans le forum Administration
    Réponses: 3
    Dernier message: 28/02/2012, 15h14
  3. [PostgreSQL] Zone de texte vers champs de type texte
    Par Roromix dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/10/2008, 09h58
  4. Réponses: 4
    Dernier message: 01/10/2008, 16h36
  5. Migration de données de SQLSERVER vers ORACLE 10g
    Par malik1982 dans le forum Oracle
    Réponses: 1
    Dernier message: 04/07/2006, 13h09

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