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
|
DECLARE
-- resultat de l'update et motifs --
v_resultat VARCHAR2(256);
v_motif VARCHAR2(256);
-- variable ancien_nom et nouveau_nom --
v_ancien_nom VARCHAR2(15);
v_nouveau_nom VARCHAR2(15);
-- Noms des fichiers --
v_fichier_in VARCHAR2(128) := 'testin.csv' ; -- a adapter sur votre configuration
v_fichier_out VARCHAR2(128) := 'testout.csv' ; -- a adapter sur votre configuration
-- Noms des répertoires --
v_dir_in VARCHAR(30) := 'FICHIERS_IN'; -- a adapter sur votre configuration
v_dir_out VARCHAR(30) := 'FICHIERS_OUT' ; -- a adapter sur votre configuration
-- Pointeurs de fichier --
LF$FicIN UTL_FILE.FILE_TYPE ;
LF$FicOUT UTL_FILE.FILE_TYPE ;
-- Tampon de travail --
v_ligne VARCHAR2(32767) ;
-- Message --
LC$Msg VARCHAR2(256) ;
-- Exception --
LE$Fin EXCEPTION ;
BEGIN
-- Ouverture du fichier en entrée
BEGIN
LF$FicIN := UTL_FILE.FOPEN( v_dir_in, v_fichier_in, 'R', 32764 ) ;
EXCEPTION
WHEN OTHERS THEN
LC$Msg := SQLERRM || ' [' || v_dir_in || '] -> ' || v_fichier_in;
RAISE LE$Fin ;
END ;
-- Ouverture du fichier en sortie
BEGIN
LF$FicOUT := UTL_FILE.FOPEN( v_dir_out, v_fichier_out, 'W', 32764 ) ;
EXCEPTION
WHEN OTHERS THEN
LC$Msg := SQLERRM || ' [' || v_dir_out || '] -> ' || v_fichier_out;
RAISE LE$Fin ;
END ;
BEGIN
LOOP
UTL_FILE.GET_LINE (LF$FicIN, v_ligne);
v_ancien_nom := SUBSTR (v_ligne, 1, INSTR (v_ligne, ';') - 1);
v_nouveau_nom := SUBSTR (v_ligne, INSTR (v_ligne, ';') + 1);
BEGIN
UPDATE NOM
SET NOM.ANCIEN_NOM = v_nouveau_nom
WHERE NOM.ANCIEN_NOM = v_ancien_nom;
IF SQL%NOTFOUND THEN
v_resultat := 'KO';
v_motif := 'Aucune ligne';
ELSE
v_resultat := 'OK';
v_motif := NULL;
END IF;
EXCEPTION
WHEN OTHERS THEN
v_resultat := 'KO';
v_motif := 'Erreur oracle ' || SQLCODE;
END;
utl_file.put_line (LF$FicOUT, v_ancien_nom || ';' || v_nouveau_nom || ';' ||
v_resultat || ';' || v_motif);
END LOOP;
Exception
When NO_DATA_FOUND Then -- Fin du fichier en entrée
-- Fermeture des fichiers --
UTL_FILE.FCLOSE( LF$FicIN ) ;
UTL_FILE.FCLOSE( LF$FicOUT ) ;
END;
EXCEPTION
WHEN LE$Fin THEN
UTL_FILE.FCLOSE_ALL ;
RAISE_APPLICATION_ERROR( -20100, LC$Msg ) ;
END ; |
Partager