|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2007 Messages : 23 ![]() |
Bonjour,
1/ Comment récupérer dans un shell « sh » les codes erreurs renvoyés par une procédure stockée SYBASE ? 2/ Comment récupérer dans un shell « sh » le nombre de lignes traités lors du DELETE (ou de lINSERT, etc.) ? D’avance merci pour votre aide Exemple de procédure stockée : CREATE PROC Recyclage ( @error_message varchar(255) = NULL OUTPUT,@error INT ) AS BEGIN SET nocount ON DECLARE @DUREE_OLD_DATA INT, @DATE_EXPLOIT char SELECT @DUREE_OLD_DATA = -15 SELECT @DATE_EXPLOIT = convert(char,getdate(),112) /*Suppression des tickets recyclés */ DELETE FROM WORK WHERE date < convert(char,dateadd(day,@DUREE_OLD_DATA,getdate()),112) /*Gestion ds erreurs*/ SELECT @error = @@ERROR IF (@error <> 0) BEGIN SELECT @error_message = 'Erreur !!! Incident lors de la suppression des tickets recyclés' GOTO THE_END END THE_END: RETURN @error END Exemple shell « sh » appelant le procédure stockée : #!/bin/sh main () { ## variable de date de debut de traitement USER=$USER_SYB_DBO PASS=$PASS_SYB_DBO SERVER=$SERVER DS_DATABASE_CUST=$DS_DATABASE_CUST date_traitement_debut=$(date +%d-%m-%y) heure_traitement_debut=$(date +%H:%M:%S) ## debut du traitement echo "$(date +%d-%m-%y) $(date +%H:%M:%S) Debut du traitement" echo "$(date +%d-%m-%y) $(date +%H:%M:%S) ---- Debut" isql -U$USER -P$PASS -S$SERVER <<THEEND 2>&1 use $DS_DATABASE_CUST go SET nocount ON EXEC Recyclage @error_message=NULL,@error=0 go quit THEEND echo "$(date +%d-%m-%y) $(date +%H:%M:%S) ---- Fin " date_traitement_fin=$(date +%d-%m-%y) heure_traitement_fin=$(date +%H:%M:%S) echo "$(date +%d-%m-%y) $(date +%H:%M:%S) Fin du traitement" echo "------------------------------------------------------------------------" echo "| Date / Heure de dibut : $date_traitement_debut $heure_traitement_debut" echo "| Date / Heure de fin : $date_traitement_fin $heure_traitement_fin " echo "------------------------------------------------------------------------" } ## Traitement Principal main $@ 1>> log_traitement_$$_`date +%Y%m%d%H%M%`.log exit 0 |
|
|
00
|
|
|
#2 |
![]() ![]() |
Il faut rediriger l'output de l'exécution d'isql dans un fichier, puis faire des grep.
Au minumum, pour les erreurs "grep Msg", et pour les records affectés "grep 'rows affected'", mais probablement que tu veux affiner un peu. Michael
__________________
Michael Peppler Membre de TeamSybase - www.teamsybase.com "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson |
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() Développeur informatique Inscription : octobre 2006 Messages : 181 ![]() |
Déjà, pour les récuperer dans ton shell il faut les récuperer dans ta proc par
Code :
SELECT @error = @@ERROR, @rowcount=@@rowcount NB_fin ensuite pour les récuperer dans ton shell il faut les exprimer dans la sortie de Sybase. Tu peux choisir de faire un print ou un select directement dans ta proc ou de tout passer en argument de sortie et les printer ou selecter apres l'appel de ta proc. Apres, si tu veux les affecter à une variable dans ton shell, tu dois pouvoir les reconnaitre. Pour cela, tu peux par exemple faire print 'lignes_touchés :%1!',@ta_variable_contenant_le_rowcount_converti_au_format_char ou select 'lignes_touchés',@ta_variable_contenant_le_rowcount et la, comme le propose meppler, tu grep sur la ligne qui commence par lignes_touchés et tu read le second champs qui est ta variable recherchée. J'espere avoir été clair ? |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com