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

SQL Oracle Discussion :

Raise_application_error en erreur


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut Raise_application_error en erreur
    Bonjour,
    Lorsque je crée la procédure ci-dessous :
    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
    CREATE OR REPLACE  PROCEDURE "VERIF_ETAT"  (
      NewEtat in Varchar2
    ) is
      ErrCode number;
    begin
         if(NewEtat='XX' or NewEtat='YY' or NewEtat is null or NewEtat='') then
            ErrCode :=0;
    		    Raise_application_error(-20000,'OK');
         else
            ErrCode :=1;
    		    Raise_application_error(-20000,'Etat non correct');
         end if;
    exception
    when others then
            ErrCode :=1;
    		Raise_application_error(-20000,'non modifié');
    end;
    Quelque soit NewEtat, je me retrouve à passer dans le exception when others et avec une erreur sur le Raise_application_error.
    Pour faire des tests, j'utilise DBMS_OUTPUT.PUT_LINE et là aucun souci, je passe bien dans le if ou le else selon la valeur de NewEtat.
    Auriez-vous une explication à cette erreur, s'il vous plait?
    Cordialement
    Pinocchio

  2. #2
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Il est normal quand tu lève une exception avec raise_application_error de passer ensuite dans le "when other", qui intercepte toutes les exceptions ...

  3. #3
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Merci, je n'y avais pas pensé.
    Est-il possible de ne pas aller plus loin dans la procédure à partir du moment où l'on a rencontré un raise_application_error?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Par défaut
    La vraie question, c'est est-ce que le when other est necessaire?
    On va soit dans le if, soit dans le else. Je ne vois pas de raison d'aller ailleurs. [Mais je me trompe souvent ]

    Par contre, le test NewEtat is null OR NewEtat='' c'est blanc bonnet et
    bonnet blanc.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    TMP@minilhc >declare
      2     a varchar2(20);
      3     procedure test_nullite(p_vc varchar2) is
      4     begin
      5        if(p_vc is null) then
      6           dbms_output.put_line('parameter is null');
      7        else
      8           dbms_output.put_line('parameter is not null ['||p_vc||']');
      9        end if;
     10     end;
     11  begin
     12     test_nullite(a);
     13
     14     a:='a';
     15     test_nullite(a);
     16
     17     a:='';
     18     test_nullite(a);
     19
     20     a:='a';
     21     test_nullite(a);
     22
     23     a:=null;
     24     test_nullite(a);
     25
     26
     27  end;
     28  /
    parameter is null
    parameter is not null [a]
    parameter is null
    parameter is not null [a]
    parameter is null
     
    PL/SQL procedure successfully completed.
     
    Elapsed: 00:00:00.03

  5. #5
    Membre éprouvé Avatar de pinocchio
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2002
    Messages : 795
    Par défaut
    Merci pour le null ou '' , j'ai toujours traité cela de manière différente et dans ce cas là à tort.

    Pour le if et le else, j'étais parti du principe, et encore une fois à tort, que si NewEtat était autre chose qu'une chaine de caractère, ce serait ni dans le if ni dans le else et donc que je le récupèrerai dans le when others.

    Merci pour toutes ces précisions.


    Ma question sur la sortie prématurée reste valable car je vais avoir d'autres procédures avec plus de test et par sécurité, je mettrai peut-être le when others

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 138
    Par défaut
    Citation Envoyé par pinocchio Voir le message
    Merci pour le null ou '' , j'ai toujours traité cela de manière différente et dans ce cas là à tort.
    C'est toutefois une bonne habitude à conserver car tous les SGBD ne considèrent pas comme Oracle que '' IS NULL.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 23h20
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 14h49
  3. Réponses: 2
    Dernier message: 27/05/2002, 20h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 16h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 10h41

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