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

Oracle Discussion :

Renvoi D'un Message D'erreur


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Points : 36
    Points
    36
    Par défaut Renvoi D'un Message D'erreur
    Bonjour,

    A l'intérieur d'un trigger j'insère une donnée d'une table dans une variable.

    J'aimerais renvoyer un message d'erreur lorsque aucune donnée n'est trouvée.
    J'ai fait (entre autres):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        EXCEPTION WHEN NO_DATA_FOUND THEN    
        RAISE  EXCEPTION 'adresse inexistante';
    Mais ça ne fonctionne pas. Je précise qu la clause EXCEPTION NO_DATA_FOUND fonctionne si derrière je mais une fonction de type insert into...

    Voilà j'espère que vous avez une idée.

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 142
    Points : 170
    Points
    170
    Par défaut
    tu peux utilisé plusieurs solutions dont :

    raise_application_error(-20001, 'Texte de l''erreur');

    Pour plus d'info :
    http://download-uk.oracle.com/docs/c...rors.htm#i7014

  4. #4
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci pour vos liens ils sont mieux que ceux que j'avais trouvés.

    J'ai du mal à comprendre s'il est possible de faire afficher un message d'erreur à l'écran qui serait déclenché par l'exception.

    Dans le lien de Fred il insère le message dans la colonne d'une table. Moi je souhaiterais le voir apparaître à la place de la réponse de la requête insert.

    Voilà ce que j'ai fait:
    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
    create or replace trigger tr_test1 instead of insert on vue_test2
    declare
    v1_id number;
     
    begin
     
        BEGIN
        select id into v1_id from test1
            where adresse=:new.adresse;
        EXCEPTION WHEN NO_DATA_FOUND THEN    
        DBMS_OUTPUT.PUT_LINE('coucou');
     
        END;
     
        insert into test2 (nom, prenom, test1_id)
            values(
                :new.nom,
                :new.prenom,
                v1_id);
    end;
    ou
    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
    create or replace trigger tr_test1 instead of insert on vue_test2
    declare
    v1_id number;
     
    begin
     
        BEGIN
        select id into v1_id from test1
            where adresse=:new.adresse;
     
     RAISE_APPLICATION_ERROR(+100, 'coucou');
     
        END;
     
        insert into test2 (nom, prenom, test1_id)
            values(
                :new.nom,
                :new.prenom,
                v1_id);
    end;
    +100 correspondant au code sql pour no_data_found, j'ai essayé aussi avec 01403.

    Ces deux solutions ne me renvoient pas d'erreur mais n'affichent pas pour autant mon message.

    Désolé de faire le boulet mais si vous pouviez m'orienter un peu plus...

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Ha OK... en fait tu voudrais changer le message standard Oracle... j'suis pas sûr que ce soit possible... tu vas devoir déclencher une erreur ORA-20001 jusqu'à ORA-20099 (de mémoire ) pour mettre ton message en remplacement de ORA-01403

    J'ai pas bien compris le +100 par contre

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2006
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 142
    Points : 170
    Points
    170
    Par défaut
    le dbms_output fonctionne sous sqlplus si la variable d'environnement SERVEROUTPUT est position à TRUE

    La fonction RAISE_APPLICATION_ERROR de créer une nouvelle erreur dont la valeur numérique est doit être comprise entre -20000 et -20999

  7. #7
    Nouveau membre du Club
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    61
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci à tous les deux,

    La solution suivante affiche bien mon message d'erreur quand l'adresse n'existe pas (malheureusement accompagné d'autres) et rajoute une ligne dans ma vue quand l'adresse existe:
    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
    create or replace trigger tr_test1 instead of insert on vue_test2
    declare
    v1_id number;
    mess_err exception;
     
    begin
     
        BEGIN
        select id into v1_id from test1
            where adresse=:new.adresse;
        EXCEPTION WHEN NO_DATA_FOUND THEN    
        RAISE mess_err;
     
        END;
     
     
        insert into test2 (nom, prenom, test1_id)
            values(
                :new.nom,
                :new.prenom,
                v1_id);
     
        EXCEPTION when mess_err THEN
         RAISE_APPLICATION_ERROR(-20002, 'adresse inexistante');
     
    end;
    Pour répondre à la question de fred j'avais trouvé pour message d'erreur sql correspondant à not_data_found +100 et -01403 don j'avais essayé les deux

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

Discussions similaires

  1. Commande system : cp s'exécute mais renvoie un message d'erreur
    Par Takka dans le forum Programmation et administration système
    Réponses: 14
    Dernier message: 21/05/2014, 20h12
  2. Réponses: 0
    Dernier message: 13/12/2013, 12h10
  3. [Exchange 2010] Serveur ne renvoie pas de message d'erreur quand destinataire erroné
    Par Benjyii dans le forum Exchange Server
    Réponses: 2
    Dernier message: 10/04/2013, 16h08
  4. [WD-2010] Commande Split qui me renvoie un message d'erreur
    Par 22papillons dans le forum VBA Word
    Réponses: 4
    Dernier message: 30/10/2012, 03h01

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