jeudi 2 septembre 2010

BDD : ORACLE : sqlloader

Un petit exemple de script utilisant "sqlloader" pour charger un fichier excel de données (au format csv), et son fichier de controle "ctl" :

Tout d'abord, le fichier ctl :

1) La commande Load Data (charge les données)


--////////////////////////////////
-- Insertion des enregistrements
--////////////////////////////////
LOAD DATA
TRUNCATE
PRESERVE BLANKS
INTO TABLE MATABLE
FIELDS TERMINATED BY '\;'
TRAILING NULLCOLS
(
ID_CMD,
ID_VERS,
OPT_CORRECTION,
IND_SUCCES_TRAITEMENT
)



function my_log
{
echo `date '+%d/%m/%Y %H:%M '`" "$1 >> $path_log/$fic_log
}

##############################
# Initialisation des path
##############################

if [ $# -ne 2 ]
then
echo 'usage : '$0' [login] [password]'
exit 1
fi

ORACONN=$1
ORAPWD=$2
path_log=`pwd`
fic_ldr=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.ldr
fic_log=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.log
fic_dis=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.dis
fic_bad=`basename $0|cut -f1 -d"."`_`date '+%Y%m%d_%H%M%S'`.bad
FIC=extract_MATABLE.csv
CTL=maj_MATABLE.ctl

##############################
# On teste la connexion a Oracle
##############################
sqlplus -s /nolog 1>/dev/null << FIN
WHENEVER SQLERROR EXIT FAILURE;
connect $ORACONN/$ORAPWD
FIN
if [ $? != 0 ]
then
echo "Connexion impossible (${ORACLE})"
exit 1
fi

ls $FIC 1>/dev/null 2>/dev/null
if [ $? = 0 ]
then
#################################
# sqlloader du fichier
#################################
dos2unix $FIC $FIC 2>/dev/null
sqlldr ${ORACONN}/${ORAPWD} control=$CTL data=$FIC log=$path_log/$fic_ldr bad=$path_log/$fic_bad discard=$path_log/$fic_dis silent='(header, feedback)' direct=false errors=100000 skip=1
if [ $? -ne 0 ]
then
my_log "Début de la mise à jour de la table MATABLE"
my_log "Erreur lors du chargement du fichier"
my_log "Detail des traitements dans le $path_log/$fic_ldr"
my_log "Detail des lignes en erreur dans le $path_log/$fic_bad"
my_log "Fin de la mise à jour de la table MATABLE"
echo 'Erreur lors du chargement du fichier '$FIC
echo '=> voir le fichier de log dans '$path_log/$fic_ldr
exit 1
fi
#################################
# Traitement du fichier
#################################
else
echo 'Fichier absent'
my_log "Début de la mise à jour de la table MATABLE"
my_log "Fichier absent"
my_log "Fin de la mise à jour de la table MATABLE"

Aucun commentaire:

Enregistrer un commentaire