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

PL/SQL Oracle Discussion :

Erreur PL/SQL et return code


Sujet :

PL/SQL Oracle

  1. #1
    Membre habitué Avatar de Kazevil
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2006
    Messages : 105
    Points : 129
    Points
    129
    Par défaut Erreur PL/SQL et return code
    Bonjou à tous,

    j'ai un soucis avec la gestion des erreurs entre PL/SQL et le script appellant qui est en KSH.

    Le problème est que lorsque l'on gère les erreurs PL/SQL avec des Exception handlers, SQLPLUS affiche
    PL/SQL procedure successfully completed.
    , même si le code PL/SQL a généré une erreur...
    Du coup son code de retour est 0

    Je vous donne un exemple, qui me pose problème.

    Je lance depuis le ksh un script sql:

    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
    KillSession()
    # PURPOSE: Kill all the T24OWNER sessions
    #--------------------------------------------------
     
    {
    sqlplus /nolog << EOF
    connect / as sysdba
     
    whenever sqlerror exit 2
    whenever oserror exit 3
     
    @${CUSTOM_BASE}/scripts/sql/kill_session.sql $sid $timestamp
     
    EOF
     
    ret_kill=$?
     
    }
    La procédure sql se lance et fait une erreur ORA-00031

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #################    START   ##########################
    Check how many sessions are connected with the T24OWNER user
    There are still 17 sessions connected for the user T24OWNER
    These sessions will be killed as the script has been launched in offline mode
    *********************************************************************
    SQLERRM = ORA-00031: session marked for kill
    SQLCODE = -31
    *********************************************************************
    #################    END   ##########################
     
    PL/SQL procedure successfully completed.
     
    Elapsed: 00:00:00.05
    Du coup ma variable ret_kill=$? reçoit 0 et considère que tout c'est passé à merveille!

    Comment pourrais faire pour récupérer le code de retour de PL/SQL au lieu de celui de SQLPLUS?????

    Merci d'avance pour votre aide

    Kaz

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 110
    Points : 111
    Points
    111
    Par défaut
    perso, je redirige tout dans un fichier, puis je fais grep sur ORA- et WARNING
    et selon je renvoie 0/4/8 le code erreur qu'il t'interesse.

    en gros ça donnerai ça

    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
    25
    26
    27
    28
    29
     
    KillSession()
    # PURPOSE: Kill all the T24OWNER sessions
    #--------------------------------------------------
     
    {
    sqlplus /nolog << EOF
    connect / AS sysdba
     
    whenever sqlerror exit 2
    whenever oserror exit 3
     
    @${CUSTOM_BASE}/scripts/sql/kill_session.sql $sid $timestamp>>resultat.log
     
    EOF
     
    if [[ -n $(grep -e "ORA-" resultat.log) && ! -n $(grep -y "WARNING" resultat.log) ]]
    then
         ret_kill=8
    else	
         if [[ -n $(grep -e "WAR-" resultat.log)  || -n $(grep -y "WARNING" resultat.log) ]]
         then 
              ret_kill=4
         else
    	  ret_kill=0
         fi		
    fi
     
    }

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Kazevil Voir le message
    ...
    Comment pourrais faire pour récupérer le code de retour de PL/SQL au lieu de celui de SQLPLUS?????

    Merci d'avance pour votre aide

    Kaz
    Mettez à jour dans le bloc PL/SQL une variable Host et returnez toujours en sortie du sqlplus le contenu de cette variable.

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/01/2023, 10h56
  2. Erreur Requête sql code vba
    Par majudis dans le forum VBA Access
    Réponses: 4
    Dernier message: 24/02/2011, 11h23
  3. [Dojo] Erreur interne Firefox "Component returned failure code"
    Par Zineb1987_UNI dans le forum Bibliothèques & Frameworks
    Réponses: 11
    Dernier message: 13/01/2010, 14h38
  4. [SQL Server 2005] Code erreur 945
    Par nox75 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/02/2008, 13h37
  5. Obtention du code d'erreur natif SQL
    Par carjo dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/01/2006, 21h32

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