IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sybase Discussion :

Récupération des codes erreurs renvoyés par une proc stock SYBASE dans un shell SH


Sujet :

Sybase

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 32
    Points : 30
    Points
    30
    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

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    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

  3. #3
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Déjà, pour les récuperer dans ton shell il faut les récuperer dans ta proc par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT @error = @@ERROR, @rowcount=@@rowcount
    NB_debut: /!\ affecter dans la meme commande sinon le rowcount se rapportera à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 ?

Discussions similaires

  1. [2.x] Récupérer dans une variable le code xml renvoyer par une vue
    Par david42 dans le forum Symfony
    Réponses: 9
    Dernier message: 17/02/2012, 22h59
  2. Réponses: 3
    Dernier message: 05/03/2010, 14h31
  3. [JMeter] Récupérer une valeur renvoyée par une procédure stockée
    Par goldest dans le forum Tests et Performance
    Réponses: 0
    Dernier message: 21/01/2009, 12h41
  4. Réponses: 1
    Dernier message: 02/05/2006, 11h20
  5. Réponses: 2
    Dernier message: 16/10/2003, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo