Excusez moi, j'espère que c'est + lisible comme ça.

La version d'Oracle est 10g

Bonjour à tous,


Je cherche à paramétrer simplement la création de tables externes (mettre en paramètres les fichiers de log, bad et "source" de la table externe).

Je pensais y arriver simplement, mais ça ne fonctionne pas.

J'ai un .bat qui lance un script sql qui se connecte à la base de données et lance le script proprement dit de création de tables externes.

Ca donne ça :

le .bat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
 
 
"sqlplus" /NOLOG @"%1SCRIPT\LanceETScript.sql" %OraUser% %UserPwd% %ORACLE_SID% "%1SCRIPT\ET%2.sql" "%2.bad" "%2.log" "%3"
LanceETScript.sql :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
set echo off
set head off
set feed off
set pause off
set pagesize 0
 
connect &1/&2@&3
	@&4 &5 &6 &7
.
run;
exit

Et le script de création de table externe en lui même :

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
27
28
29
 
 
CREATE OR REPLACE DIRECTORY inDir AS 'C:\IDidItMyWay\In';
CREATE OR REPLACE DIRECTORY outDir AS 'C:\IDidItMyWay\Out';
DROP TABLE GEtoto;
CREATE TABLE GEtoto
(
	typenr		VARCHAR2(2),
	fill1		VARCHAR2(50),
	fill2		VARCHAR2(126),
	fill3		VARCHAR2(8),
	fill4		VARCHAR2(3),
	MOISTRAI	NUMBER(6),
	NBENREG		NUMBER(8)
)
ORGANIZATION EXTERNAL
(
	TYPE ORACLE_LOADER
	DEFAULT DIRECTORY inDir
	ACCESS PARAMETERS(records delimited by newline
		badfile	outDir:'&5'
		logfile outDir:'&6'
		fields terminated by ';'
		missing field values are null
		(typenr,fill1,fill2,fill3,fill4,MOISTRAI,NBENREG))
	LOCATION ('&1')
)
PARALLEL
REJECT LIMIT UNLIMITED ;
================================

Voila !

On dirait que le script finale s'exécute 2 fois et plante à la 2nde fois.

Y a-t-il moyen de faire + simple (tout en sachant qu'il y a beaucoup de paramètres, la procèdure de création de la table externe doit être paramètrable).

Ai-je été clair ? (je crains que non, mais n'hésitez pas à poser des questions).

Surtout si on peut faire + simple ...

Merci d'avance.

Cordialement.