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

Linux Discussion :

code retour d'un shell


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut code retour d'un shell
    Bonjour à tous,

    Voilà mon soucis, je lance une proc-stock via un shell.
    ma proc renvoie plusieurs codes erreurs différents selon son exécutuion.

    ce que je cherche a faire, c'est : Récupèré le code erreur de la proc avec mon script shell...

    est ce que l'un de vous a une idée ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Si le code d'erreur est retourné comme un simple printf :
    ret=$(cmd)

    Si le code d'erreur est un code de sortie :
    cmd
    ret=$?

  3. #3
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    ok merci, moi j'utilisais la deuxième solution ça ne marchait pas...

    ps: je n'ai pas acces au proc-stock...

    la seule chose que je sais c'est que si tu l'exécute via toad tu as la ligne "RESULT = STA-00005"

    en posant deux trois questions, il semblerait qu'il utilise la fonction oracle suivante pour renvoyer le code retour :
    "DBMS_OUTPUT.Put_Line('RESULT = ' || RESULT)"

    je vais tester tout ça et on verra

  4. #4
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    me revoilà dsl de vous dire que cela ne marche pas...

    voilà l'apel le script shell complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    SQL_FILE=$EXEC_PATH/bin_config/script.sql
     
    echo "set outputserver on;" >> $SQL_FILE
    echo "DECLARE" >> $SQL_FILE
    echo " INTEGRATION_LOG_ID VARCHAR2(200);" >> $SQL_FILE
    echo " RESULT VARCHAR2(200);            " >> $SQL_FILE
    echo " P_ENT_TYPE NUMBER;               " >> $SQL_FILE
    echo " P_ENT_CODE NUMBER;               " >> $SQL_FILE
    echo " YEAR_IN NUMBER;                  " >> $SQL_FILE
    echo "BEGIN                             " >> $SQL_FILE
    echo " INTEGRATION_LOG_ID := '0';       " >> $SQL_FILE
    echo " RESULT := NULL;                  " >> $SQL_FILE
    echo " P_ENT_TYPE := 4;                 " >> $SQL_FILE
    echo " P_ENT_CODE := 999;               " >> $SQL_FILE
    echo " YEAR_IN := 2008;                 " >> $SQL_FILE
    echo "SSDX_ENG.DEALS_INBOUND_INTERFACES.CPS_INTERFACE ( INTEGRATION_LOG_ID, RESULT, P_ENT_TYPE, P_ENT_CODE, YEAR_IN );" >> $SQL_FILE 
    echo "DBMS_OUTPUT.Put_Line(RESULT); " >> $SQL_FILE
    echo "COMMIT; " >> $SQL_FILE 
    echo "END; " >> $SQL_FILE
    echo "/">>$SQL_FILE;;
     
    #exécution du fichier sql
    ORACLE_HOME/bin/sqlplus -L $USER/$PASSWORD@$DATABASE < $SQL_FILE > $LOG_FILE 2>&1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CODE_RETOUR=$($ORACLE_HOME/bin/sqlplus -L $USER/$PASSWORD@$DATABASE < $SQL_FILE > $LOG_FILE 2>&1 )
    ou
    ne marche pas

  5. #5
    Membre éclairé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Août 2007
    Messages
    509
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Août 2007
    Messages : 509
    Par défaut
    Ca affiche quoi comme résultat?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Par défaut
    Déjà avec $LOG_FILE 2>&1 tu rediriges stderr et stdout dans un fichier de log donc ret=$(cmd) ne retournera rien.

    Je ne connais pas du tout Oracle mais je pense que tu trouveras ce que tu veux du côté de :
    WHENEVER SQLERROR

    ce qui permet de retourner le code erreur sql si une erreur se produit pendant l'éxécution de la requête.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par F2S Voir le message
    me revoilà dsl de vous dire que cela ne marche pas...

    voilà l'apel le script shell complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    SQL_FILE=$EXEC_PATH/bin_config/script.sql
     
    echo "set outputserver on;" >> $SQL_FILE
    echo "DECLARE" >> $SQL_FILE
    echo " INTEGRATION_LOG_ID VARCHAR2(200);" >> $SQL_FILE
    echo " RESULT VARCHAR2(200);            " >> $SQL_FILE
    echo " P_ENT_TYPE NUMBER;               " >> $SQL_FILE
    echo " P_ENT_CODE NUMBER;               " >> $SQL_FILE
    echo " YEAR_IN NUMBER;                  " >> $SQL_FILE
    echo "BEGIN                             " >> $SQL_FILE
    echo " INTEGRATION_LOG_ID := '0';       " >> $SQL_FILE
    echo " RESULT := NULL;                  " >> $SQL_FILE
    echo " P_ENT_TYPE := 4;                 " >> $SQL_FILE
    echo " P_ENT_CODE := 999;               " >> $SQL_FILE
    echo " YEAR_IN := 2008;                 " >> $SQL_FILE
    echo "SSDX_ENG.DEALS_INBOUND_INTERFACES.CPS_INTERFACE ( INTEGRATION_LOG_ID, RESULT, P_ENT_TYPE, P_ENT_CODE, YEAR_IN );" >> $SQL_FILE 
    echo "DBMS_OUTPUT.Put_Line(RESULT); " >> $SQL_FILE
    echo "COMMIT; " >> $SQL_FILE 
    echo "END; " >> $SQL_FILE
    echo "/">>$SQL_FILE;;
     
    #exécution du fichier sql
    ORACLE_HOME/bin/sqlplus -L $USER/$PASSWORD@$DATABASE < $SQL_FILE > $LOG_FILE 2>&1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CODE_RETOUR=$($ORACLE_HOME/bin/sqlplus -L $USER/$PASSWORD@$DATABASE < $SQL_FILE > $LOG_FILE 2>&1 )
    ou
    ne marche pas
    Tamiel a parfaitement bien répondu. Si tu rediriges l'affichage d'une commande dans un fichier, tu ne peux pas le récupérer avec var=$(commande).

    Moi, je rajouterais juste que tu peux t'éviter tous ces ">> $SQL_FILE" en utilisant le groupement de commandes
    Au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo "set outputserver on;" >> $SQL_FILE
    echo "DECLARE" >> $SQL_FILE
    echo " INTEGRATION_LOG_ID VARCHAR2(200);" >> $SQL_FILE
    echo " RESULT VARCHAR2(200);            " >> $SQL_FILE
    echo " P_ENT_TYPE NUMBER;               " >> $SQL_FILE
    Tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (
        echo "set outputserver on;"
        echo "DECLARE"
        echo " INTEGRATION_LOG_ID VARCHAR2(200);"
        echo " RESULT VARCHAR2(200);            "
        echo " P_ENT_TYPE NUMBER;               "
    ) >> $SQL_FILE
    Tu peux aussi utiliser les sorties numérotées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    exec 4>$SQL_FILE
     
    echo "set outputserver on;" 1>&4
    echo "DECLARE" 1>&4
    echo " INTEGRATION_LOG_ID VARCHAR2(200);" 1>&4
    echo " RESULT VARCHAR2(200);            " 1>&4
    echo " P_ENT_TYPE NUMBER;               "  1>&4
    Ou associer les deux astuces
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    exec 4>$SQL_FILE
    (
        echo "set outputserver on;"
        echo "DECLARE"
        echo " INTEGRATION_LOG_ID VARCHAR2(200);"
        echo " RESULT VARCHAR2(200);            "
        echo " P_ENT_TYPE NUMBER;               "
    ) 1>&4
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    F2S
    F2S est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 139
    Par défaut
    oui c'est vrai je m'en suis rendu compte apres... dsl

    j'ai modifier un peu le script (en suivant vos remarque) voilà a quoi il ressemble maintenant :
    un fichier script.sql qui donner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    WHENEVER SQLERROR EXIT FAILURE;
    VARIABLE TOTO VARCHAR2(200);
    DECLARE
     INTEGRATION_LOG_ID VARCHAR2(200);
     RESULT VARCHAR2(200);
     P_ENT_TYPE NUMBER;
     P_ENT_CODE NUMBER;
     YEAR_IN NUMBER;
    BEGIN
     INTEGRATION_LOG_ID := '0';
     RESULT := NULL;
     P_ENT_TYPE := 4;
     P_ENT_CODE := 999;
     YEAR_IN := 2008;
    SSDX_ENG.DEALS_INBOUND_INTERFACES.CPS_INTERFACE ( INTEGRATION_LOG_ID, RESULT, P_ENT_TYPE, P_ENT_CODE, YEAR_IN );
    COMMIT;
    :TOTO := RESULT;
    END;
    PRINT TOTO;
    exit;
    et mon shell qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CODE_RETOUR=$($ORACLE_HOME/bin/sqlplus -L $USER/$PASSWORD@$DATABASE < $SQL_FILE )
     
    echo $CODE_RETOUR
     
    .... traitement sur le code retour ....
    hé rien je ne récupère rien du tt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/05/2014, 18h27
  2. [lftp] Code retour dans le shell
    Par extjbrunet dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 22/11/2013, 23h19
  3. Réponses: 1
    Dernier message: 21/06/2012, 11h54
  4. Bizzarerie en shell avec les codes retour
    Par kyake dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 13/04/2008, 12h20
  5. CODE RETOUR GENERE PAR PL/SQL POUR SHELL UNIX
    Par mimi_été dans le forum PL/SQL
    Réponses: 6
    Dernier message: 18/11/2004, 08h32

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