Pb syntaxe avec SQL*Loader

Fermé
stefy - 31 oct. 2008 à 08:58
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 - 31 oct. 2008 à 12:12
Bonjour,

Je lance sqloader de la facon suivante :
sqlldr user/pawd@DB fichier.ctl ./tmp/fichier.log

mon fichier control se présente de la facon suivante :
LOAD DATA
INFILE fichier_de_donnee.TXT
BADFILE fichier_toto.bad
REPLACE
INTO TABLE gfft20
(
...
...
)

mon problème est que j'aimerais que mon fichier de données soit passé en paramètre. J'ai essayé dans ma ligne de commande de rajouter DATA=mon_fichier mais je ne sais pas comment le récupérer dans mon fichier de controle.
je ne suis pas sure d'avoir été tres claire ...

Merci de votre aide car je patauge un peu !
A voir également:

1 réponse

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
31 oct. 2008 à 12:12
Salut,
à part creer un nouveau fichier de control avec un exe (pour l'exemple appelé exemple.exe):
#include <stdio.h>
#include <string.h>
int main(int argc,char*arg[])
{FILE*pf;
FILE*pf1;
int i=0;
char mot[255];
char rempl[255];
char*infile="INFILE ";
pf=fopen("ton_lecteur\\ton_chemin\\\fichier.ctl","r");
pf1=fopen("ton_lecteur\\ton_chemin\\fichier1.ctl","w");
while (!feof(pf))
{fgets(mot,255,pf);
if(i==0)
	{if(strncmp(mot,infile,strlen(infile))==0)
		{
		strcpy(rempl,infile);
		strcat(rempl,arg[1]);
		fwrite(rempl,1,strlen(rempl)*sizeof(char),pf1);
		fwrite("\n",1,sizeof(char),pf1);
		i++;
		}
else fwrite(mot,1,strlen(mot)*sizeof(char),pf1);
}
fclose(pf);
fclose(pf1);
return 1;
}

puis dans ton batch faire:
pour windows:
ton_lecteur:
cd ton_chemin
exemple.exe %1
del /Q fichier.ctl
rename fichier1.ctl fichier.ctl
sqlldr user/pawd@DB fichier.ctl ./tmp/fichier.log

et lancer ton batch avec la commande
mon_batch nom_du_fichier_de_donnee.TXT


sinon pour linux:
cd /ton_chemin
./exemple $1
rm fichier.ctl
mv fichier1.ctl fichier.ctl
sqlldr user/pawd@DB fichier.ctl ./tmp/fichier.log

et lancer ton batch avec la commande
./mon_batch nom_du_fichier_de_donnee.TXT

j'espere ca pourra t'aider!!
@+
0