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 :

Message d'erreur utilisateur


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 907
    Par défaut Message d'erreur utilisateur
    Bonjour à tous,
    Je dois créer un trigger sur une table Distance(Ville1,Ville2,NbKM); clé primaire : Ville1,Vill2.
    Ce trigger me permettrait d'empêcher un utilisateur de saisir les deux lignes <Marseille,Paris,800> et <Paris,Marseille,Paris,800> :
    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
     
    CREATE OR REPLACE TRIGGER  "Insert Distance" 
     
    before insert on Distance
     
    for each row
     
    declare
    wmess varchar(100);
    status integer;
    wcount number;
    begin
    select count(*) into wcount from distance where distance.ville2=:new.ville1 and distance.ville1=:new.ville2;
     If wcount > 0  Then 
        DBMS_OUTPUT.PUT_LINE('Saisie Incorecte !!!');
        DBMS_OUTPUT.GET_LINE(wmess,status);
     end if;
    end;
    /
    et je n'ai pas d'affichage ... quand l'utilisateur fait cette erreur.
    J'ai entendu dire que DBMS devait s'utiliser avec les commandes SQL + je comprends quand c'est pour tester un trigger mais comment fait - on pour afficher des infos à un utilisateur ?
    J'utilise Oracle Application Express 4.1.1.00.23
    MErçi de me répondre si vous avez des connaissances sur ce sujet.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Pour afficher dans APEX tu dois pouvoir utiliser le package HTP notemment htp.p
    Cependant quelques remarques :

    1/ Tu ne cherches pas à afficher un message depuis le trigger mais à renvoyer une erreur.
    Pour ça il faut utiliser raise_application_error

    2/ Ton trigger fonctionne en INSERT INTO VALUES mais tombera en erreur de table en mutation dans le cas d'un INSERT INTO SELECT

    Pour une approche plus propre tu peux utiliser un index basé sur une fonction (FBI) commme proposé par mnitu dans cette discussion.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 907
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Pour afficher dans APEX tu dois pouvoir utiliser le package HTP notemment htp.p
    Cependant quelques remarques :

    1/ Tu ne cherches pas à afficher un message depuis le trigger mais à renvoyer une erreur.
    Pour ça il faut utiliser raise_application_error

    2/ Ton trigger fonctionne en INSERT INTO VALUES mais tombera en erreur de table en mutation dans le cas d'un INSERT INTO SELECT

    Pour une approche plus propre tu peux utiliser un index basé sur une fonction (FBI) commme proposé par mnitu dans cette discussion.
    Merçi pour ta réponse,
    J'ai modifié mon trigger avec raise_application_error en m'inspirant des exemples donnés mais rien ne se passe :
    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
     
    Create or replace trigger "Insert Distance"
     
    before insert on Distance
     
    for each row
     
    declare
    wmess varchar(100);
    status integer;
    wcount number;
    erreur_$ais Exception;
     
    begin
    select count(*) into wcount from distance where distance.ville2=:new.ville1 and distance.ville1=:new.ville2;
     If wcount > 0  Then 
        RAISE erreur_$ais; 
     end if;
    EXCEPTION
      when erreur_$ais then dbms_output.put_line( 'Saisie Incorecte !!!') ;
    end
    Si tu as des modifs à apporter merçi

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXCEPTION
      when erreur_$ais then dbms_output.put_line( 'Saisie Incorecte !!!') ;
    Ce bout de code catch l'exception et l'affiche via DBMS_OUTPUT or tu ne vois pas les messages de DBMS_OUTPUT donc ça revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXCEPTION
      when erreur_$ais then NULL;
    Donc supprime ce catch inutile.

    Et surtout relit ma précédente réponse car le trigger n'est pas une solution viable pour ce besoin !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 907
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXCEPTION
      when erreur_$ais then dbms_output.put_line( 'Saisie Incorecte !!!') ;
    Ce bout de code catch l'exception et l'affiche via DBMS_OUTPUT or tu ne vois pas les messages de DBMS_OUTPUT donc ça revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXCEPTION
      when erreur_$ais then NULL;
    Donc supprime ce catch inutile.

    Et surtout relit ma précédente réponse car le trigger n'est pas une solution viable pour ce besoin !

    Pourtant c'est sur ce même principe vu sur le Guide PL/SQL que j'ai construit mon trigger : (extrait du cours) :
    [/CODE]
    DECLARE
    LE$Fin Exception ;

    Begin
    …..
    Raise LE$Fin ;

    EXCEPTION
    WHEN LE$Fin Then
    ……….
    END ;[CODE]

    Aussi que veux tu dire par cath ?

    MErçi de ton aide

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 907
    Par défaut réponse à skuatamad
    Citation Envoyé par skuatamad Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXCEPTION
      when erreur_$ais then dbms_output.put_line( 'Saisie Incorecte !!!') ;
    Ce bout de code catch l'exception et l'affiche via DBMS_OUTPUT or tu ne vois pas les messages de DBMS_OUTPUT donc ça revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EXCEPTION
      when erreur_$ais then NULL;
    Donc supprime ce catch inutile.

    Et surtout relit ma précédente réponse car le trigger n'est pas une solution viable pour ce besoin !
    Finalement j'ai bien relu tes conseils et j'ai crée un index et ça fonctionne, mais j'aimerais maintenant affiner le message d'erreur d'Oracle en en créant un plus personnalisé, j'ai donc essayé ça mais ça ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    declare
    erreur_$ais Exception;
    begin
      raise erreur_$ais;
     
    EXCEPTION
    when erreur_$ais then
     
     
    ORA-00001:Saisie incorecte doublon
     
    end;
    les erreurs affichées :

    ORA-06550: Ligne 10, colonne 4 :
    PLS-00103: Symbole "-" rencontré à la place d'un des symboles suivants :

    := . ( @ % ;


    Si tu pouvais me guider merçi encore

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/04/2016, 18h39
  2. Réponses: 12
    Dernier message: 27/06/2006, 11h08
  3. Réponses: 4
    Dernier message: 04/03/2003, 01h05
  4. [CR] Message d'erreur
    Par nono1 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 11/09/2002, 14h54
  5. Réponses: 2
    Dernier message: 27/05/2002, 19h46

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