Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > ETL > Sunopsis
Sunopsis Forum d'entraide Sunopsis
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2010, 09h40   #1
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 11h04   #2
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
j'ai réussi à obtenir un truc mais ce n'est pas vraiment satisfaisant

en faisant :

Code :
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 ?
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2010, 20h23   #3
Modérateur
 
Homme
Administrateur de base de données
Inscription : août 2007
Messages : 1 158
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Belgique

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

Informations forums :
Inscription : août 2007
Messages : 1 158
Points : 1 617
Points : 1 617
Hello,

Si du cote de SQL Server tu casts en:
Code :
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.
Ptit_Dje est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 09h39   #4
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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 :
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 :
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"
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 11h25   #5
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
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)
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 11h33   #6
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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.
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 14h14   #7
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
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
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 15h10   #8
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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 ?
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 16h02   #9
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
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.
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2010, 17h20   #10
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
merci kisscool
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 10h51   #11
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
malheureusement je n'aurais pas le temps de m'en oqp aujourd'hui .
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 10h58   #12
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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.
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 16h36   #13
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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...
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2010, 15h57   #14
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
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.
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2010, 19h20   #15
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
j'étudie en alternance et je suis rentré à l'école

je reprend mon poste en entreprise dans 15 jours, je te tiens au jus.
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 14h03   #16
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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 :
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)
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h16   #17
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
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
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h32   #18
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
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
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h48   #19
Membre actif
 
Consultant informatique
Inscription : mars 2003
Messages : 130
Détails du profil
Informations personnelles :
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : mars 2003
Messages : 130
Points : 181
Points : 181
as tu m'y sql server en espace de travail ?
kisskool45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h15   #20
Invité régulier
 
manuel briot
Inscription : octobre 2010
Messages : 56
Détails du profil
Informations personnelles :
Nom : manuel briot

Informations forums :
Inscription : octobre 2010
Messages : 56
Points : 7
Points : 7
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 :
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)
Manu300886 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h01.


 
 
 
 
Partenaires

Hébergement Web