Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2007, 11h44   #1
Invité de passage
 
Inscription : février 2007
Messages : 23
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 23
Points : 1
Points : 1
Par défaut Récupération des codes erreurs renvoyés par une proc stock SYBASE dans un shell SH

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
jfmerveille est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2007, 11h55   #2
Rédacteur/Modérateur
 
Inscription : janvier 2006
Messages : 1 301
Détails du profil
Informations personnelles :
Âge : 52

Informations forums :
Inscription : janvier 2006
Messages : 1 301
Points : 1 505
Points : 1 505
Envoyer un message via AIM à mpeppler
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
mpeppler est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2007, 14h42   #3
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
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_debut: /!\ affecter dans la meme commande sinon le rowcount se rapportera à
Code :
SELECT @error = @@ERROR
et vaudrait alors toujours 1
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 ?
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h46.


 
 
 
 
Partenaires

Hébergement Web