Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > SQL*Loader
SQL*Loader Forum d'entraide sur Oracle SQL*Loader
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 20/07/2011, 23h26   #1
Invité régulier
 
Inscription : juin 2007
Messages : 63
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 63
Points : 7
Points : 7
Par défaut Problème chargement sqlloader jython odi

Bonjour à tous,


J'ai encore une fois besoin de vos lumières

Je travaille actuellement sur un projet où on utilise odi comme ETL.

Mais j'ai un souci avec un fichier plat en source.

Ce fichier doit alimenter une dizaine de tables.La première colonne du fichier plat permet de savoir quelle table on va alimenter.

Ne voulant pas passer par une dizaine d'interface pour traiter un fichier source, on a décidé de passer par sqlloader (je ne connaissais pas).

J'ai récupéré le code que génère odi (pour le module de connaissance sqlloader) et j'ai essayé de le modifier dans un traitement.

ci dessous le code du fichier de controle :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
SnpsOutFile "-File=/local/fichier_source.ctl" "-CHARSET_ENCODING=ISO8859-1"
OPTIONS (
	SKIP=0,
	ERRORS=9999999999,
	DIRECT=FALSE
	)
LOAD DATA
INFILE "/local/fichier_source.txt" "STR x'0A'"
BADFILE "/local/fichier_source.bad"
DISCARDFILE "/local/fichier_source.dsc"
DISCARDMAX 1
 
INTO TABLE BASE.Table_01 when (to_number(C1 = 1))
 
 
FIELDS TERMINATED BY X'7C'
 
TRAILING NULLCOLS
(
	C1     FILLER	,
	Num_client,
	Nom,
        Prenom,
	DATN)
Voici le callsqldr que j'ai récupéré (du jython)sous odi (via le module de connaissance) et que j'ai essayé d'adapté
Code :
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
27
28
29
30
31
32
33
34
35
36
37
import java.lang.String
import java.lang.Runtime AS Runtime
FROM jarray import array
import java.io.File
import os
import re
import javaos
 
 
 
def reportnbrows():		
 
	f = open(r"/local/fichier_source.log", 'r') 
	try:
		FOR line IN f.readlines():
			IF line.find("MAXIMUM ERROR COUNT EXCEEDED")>=0 :
				raise line
	finally:
		f.close() 
 
 
 
ctlfile = r"""/local/fichier_source.ctl"""
logfile = r"""/local/fichier_source.log"""
OUTFILE = r"""/local/fichier_source.out"""
oracle_sid=''
IF len('BASE/REFDEV00')>0: oracle_sid = '@'+'BASE/REFDEV00'
 
loadcmd = r"""sqlldr ODI/<@=snpRef.getInfo("DEST_PASS") @>%s control="%s" log="%s" > "%s" """ % (oracle_sid,ctlfile, logfile, OUTFILE)
 
rc = os.system(loadcmd)
 
IF rc <> 0 AND rc <> 2:
        raise "Load Error", "See %s for details" % logfile
 
IF rc==2:
        reportnbrows()

J'ai exécuté le traitement la première étape de génération du fichier de controle fonctionne bien (il est généré dans le répertoire).

Par contre l'étape callsqlldr tombe en échec.

Ci dessous le message d'erreur
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
java.lang.Exception: The application script threw an exception: java.lang.NullPointerException BSF info: Call sqlldr  TABLES TEST_table1 at line: 0 COLUMN: columnNo
	at com.sunopsis.dwg.codeinterpretor.SnpCodeInterpretor.transform(SnpCodeInterpretor.java:635)
	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.codeInterpretation(SnpSessTaskSql.java:419)
	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.execScriptingOrders(SnpSessTaskSql.java:1615)
	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTaskTrt(SnpSessTaskSql.java:2755)
	at com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask(SnpSessTaskSql.java:2515)
	at com.sunopsis.dwg.dbobj.SnpSessStep.treatAttachedTasks(SnpSessStep.java:537)
	at com.sunopsis.dwg.dbobj.SnpSessStep.treatSessStep(SnpSessStep.java:449)
	at com.sunopsis.dwg.dbobj.SnpSession.treatSession(SnpSession.java:1954)
	at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$2.doAction(StartSessRequestProcessor.java:326)
	at oracle.odi.core.persistence.dwgobject.DwgObjectTemplate.execute(DwgObjectTemplate.java:224)
	at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.doProcessStartSessTask(StartSessRequestProcessor.java:246)
	at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.access$0(StartSessRequestProcessor.java:237)
	at oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor$StartSessTask.doExecute(StartSessRequestProcessor.java:794)
	at oracle.odi.runtime.agent.processor.task.AgentTask.execute(AgentTask.java:114)
	at oracle.odi.runtime.agent.support.DefaultAgentTaskExecutor$2.run(DefaultAgentTaskExecutor.java:83)
	at java.lang.Thread.run(Thread.java:619)
Caused BY: org.apache.bsf.BSFException: The application script threw an exception: java.lang.NullPointerException BSF info: Call sqlldr  TABLES TEST_table1 at line: 0 COLUMN: columnNo
	at bsh.util.BeanShellBSFEngine.eval(Unknown Source)
	at bsh.util.BeanShellBSFEngine.exec(Unknown Source)
	at com.sunopsis.dwg.codeinterpretor.SnpCodeInterpretor.transform(SnpCodeInterpretor.java:621)
	... 15 more

Je n'y comprends plus rien.

Merci d'avance pour votre aide.
mmanta1 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 00h28.


 
 
 
 
Partenaires

Hébergement Web