Salut !
C'est marrant j'ai eu exactement la même chose à faire dernièrement, mais j'ai eu la chance de partir de codes source que l'on m'a filés !
Je sais pas comment est ta procédure mais en gros en tout début mon fichier sql je mets :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| WHENEVER OSERROR EXIT FAILURE
WHENEVER SQLERROR EXIT SQL.SQLCODE
set serveroutput on
set echo off
set pause off
set linesize 200
set pagesize 50000
set newpage none
set heading off
set feedback off
set term off
spool &2
CONNECT &1
DECLARE
/* mon programme */ |
où &1 est un paramètre en entrée de connexion usr/mdp
et &2 est le chemin du fichier log
L'option "spool" (d'après ce que j'ai compris) permet d'écrire dans un buffer temporaire puis d'écrire dans le fichier stipulé.
Après dans ton programme tu gères les erreurs avec tes blocs "exception" et des "dbms_output.put" qui sortiront dans ton log (pardon je fait un copier/coller bête et méchant):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| Exception
when no_data_found Then -- on est arrivé à la fin du fichier d'entrée
dbms_output.put_line('|* When no_data_found principal *|');
if tag_erreur then
rollback;
dbms_output.put_line('|* Code Erreur : ' || sqlcode);
dbms_output.put_line('|* Message Erreur : ' || sqlerrm);
end if;
commit;
dbms_output.put_line('Cpt Lignes APPRO = ' || cpt_ligne || ' / Cpt Lignes GOLD correspondantes = ' || cpt_ligne_out);
dbms_output.put_line('MSG=fin des messages');
dbms_output.put_line('LOG=fin du script: '||to_char(sysdate,'HH24:MI:SS'));
UTL_FILE.FCLOSE( LF$FicIN ) ; -- fermeture du fichier
when others Then
rollback;
commit;
UTL_FILE.FCLOSE_ALL ;
dbms_output.put_line('|* *|');
dbms_output.put_line('|* ROLLBACK *|');
dbms_output.put_line('|*************************Interruption du programme************************|');
END ; |
Ensuite je sais pas comment tu dois appeler ton programme, mais moi j'ai créé un fichier shell où je lance la commande avec sqlplus :
sqlplus /NOLOG @${myProgram} ${ChaineConnectionUSR_MDP} ${monFichierLST} >> ${monFichierLOG}
Le fichier lst est pas indispensable je pense.
J'ai défini les variables suivantes :
1 2
| monFichierLST = "mon_chemin_unix/repertoire_logs/myFileLst.lst"
monFichierLOG = "mon_chemin_unix/repertoire_logs/myFileLog.log" |
Ensuite pour gérer des noms de fichier log uniques, je définis dans mon shell :
1 2
| # Variable identifiant unique
gsIdUnique=${$}.$(date "+%m%d%H%M%S") |
Et je gère mes noms de fichiers comme ceci :
monFichierLOG=/mon_repertoire/monFichierLog_${gsIdUnique}".log"
J'obtiens alors un nom de fichier du type :
monFichierLog_0530115206.log
J'espère que ça répond en partie à tes questions !
En tout cas je compatis car on tombe tous sur des galères au boulot
Bon courage !
Partager