Bonjour,

J'ai un script shell que j'utilise pour charger une table Oracle, via SQL Loader.
Ce script fonctionne à moitié. Lorsqu j'exécute le script et que je luis indique en entrée un nom de fichier inexistant, il me renverra un CR=3.(c'est OK).
Lorsque j'exécute le script avec un fichier en entrée contenant aucune erreur de chargement, il me renvoie un CR=0.(c'est Ok).
Par contre, si je lui met en entrée un fichier existant mais truffé d'erreurs, il me renverra invariablement un CR=0et là c'est KO, car je m'attends dans ce cas précis à avoir un CR=2.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#!/bin/sh
#====================================================================
#NOM DU SCRIPT 			:  dvn_0cw1.sh
#====================================================================
# --------------------------------------------------------------------
# OBJECT 
#	lance le batch cw1
#---------------------------------------------------------------------
#  PARAMETRE 
#		Aucun
# 
# EXIT :
#	0 Execution reussie
# 	1 Erreur java (voir la log)
#	2 Erreur de chargement SQL*Loader (voir la log SQL*Loader)
#	3 Erreur d'execution du shell
# --------------------------------------------------------------------
#====================================================================
 
. $UNXSCRIPT/dvn_set_proc.sh
. $UNXSCRIPT/dvn_set_env.sh
 
#Fonction usage - affiche l'aide de la commande
usage () {
  echo " "
  echo "Syntaxe : ./dvn_0cw1.sh <nom fichier log> <chemin fichier entree>"
  echo " "
  echo "Version : 1.0"
}
 
#--------------------------------
#Verification des arguments
#--------------------------------
#verification des arguments
if [ $# -eq 1 -a \( $1'_' = '-h_' -o $1'_' = '--help_' \) ]; then
	usage
	sortir $RET_SUCCES
elif [ $# -eq 2 ]; then
	FICHIER_LOG=$UNXLOG'/'$1
	echo 'log :'$FICHIER_LOG
else
	echo "Argument ou nombre d'arguments invalide pour le batch $CODE_BATCH"
	sortir $RET_ERR_SHELL
fi
 
#--------------------------------
#Chargement des variables
#--------------------------------
CODE_BATCH='cw1'
 
#--------------------------------
#Corps du script
#--------------------------------
 
#Fichier de donnees d'entree
FICHIER_DATA=$2
if [ ! -r $FICHIER_DATA ]; then
	echo "Fichier de donnees d'entree "$FICHIER_DATA" introuvable ou vous n'avez pas les droits de lecture"
	sortir $RET_ERR_SHELL
fi
 
DATE_DEBUT=`perl -e "print time;"`
echo "------ Lancement batch $CODE_BATCH a `date +'%R'` -------" > $FICHIER_LOG
echo " " >> $FICHIER_LOG
echo "Import des donnees ..." >> $FICHIER_LOG
 
#Lancement de SQL Loader
import_fichier_plat $CODE_BATCH $FICHIER_DATA 0 >> $FICHIER_LOG
 
#Verification des erreurs sql loader
FICHIER_BAD=$LOADER_LOG_PATH'/dvn_lo0'$CODE_BATCH'.bad'
if [ -f $FICHIER_BAD ]; then #Erreur sur certaines donnees
	NB_REJET=`cat $FICHIER_BAD | wc -l | tr -d ' '`
elif [ $CODE_RETOUR_IMPORT -eq $RET_SUCCES ]; then #Pas d'erreur
	NB_REJET=0
else #Erreur fatale
	NB_REJET=-1
fi
echo "Nombre d'enregistrements en erreur : "$NB_REJET  >> $FICHIER_LOG
 
echo "Import des donnees termine" >> $FICHIER_LOG
echo " " >> $FICHIER_LOG
#echo "Lancement du batch java ..." >> $FICHIER_LOG
 
RETOUR_BATCH=$?
DATE_FIN=`perl -e "print time;"`
TEMPS_PASSE=`expr $DATE_FIN - $DATE_DEBUT`
MINUTES=`expr $TEMPS_PASSE / 60`
SECONDES=`expr $TEMPS_PASSE % 60`
#echo "------ Batch java termine en $MINUTES m et $SECONDES s -------" >> $FICHIER_LOG
sortir $RETOUR_BATCH
Pourtant il va regarder dans le fichier bad le nombre de rejêts.

Je ne comprends pas ce qui se passe.

Merci pour votre aide.

Pascal.