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 :

raise_application_error et table utilisateur


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut raise_application_error et table utilisateur
    Bonjour,

    Je débute sur oracle.

    Dans le schéma utilisateur , j'ai une table messages qui contient les messages d'erreurs de type ORA-20501.

    Dans les procédures PL/SQL utilisées par l'application, les erreurs sont affichés grâce à l'instruction raise_application_error du style raise_application_error(-20501,'%s' || toto)

    j'aimerais savoir comment l'instruction raise_application_error fait le lien avec la table messages gérées par l'application ?

    ( Autrement dit comment raise_application_error sait qu'il faut aller chercher pour tel ou tel numéro la table messages et non pas la table de reference des messages types d'oracle )

    j'espère avoir été clair et je vous remercie pour vos explications

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    A vous de faire un Select dans votre table pour donner la traduction correspondante à la fonction Raise_Application_Error().

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    je ne comprends pas la reponse....

    raise_application_error est une fonction pl/sql par defaut , non ?
    ou elle peut être réécrite mais alors dans quelle table oracle chercher ?

  4. #4
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Raise_Application_Error() ne va rien chercher nulle part. Vous lui donnez en argument un numéro d'erreur et un message. Si vos messages sont stockés dans une table, vous devez donc faire un Select dans cette table et donner le résultat comme 2ème argument.

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    arf je me suis pas assez bien expliqué alors.

    en fait la commande que j'ai dans les procédures pl/sql utilisées est du style :

    raise_application_error(-20501,'%s' || toto)

    directement, il n'indique nulle part la table messages !!

    pourtant j'ai ajouté une ligne dans la table message avec un numero du style ORA-20503

    je n'ai fait qu'ajouter dans la procédure PL/SQL la ligne
    raise_application_error(-20503,'%s' || toto)
    et j'ai vu apparaitre le message que j'avais ajouter dans ma table messages dans l'application.

    je ne comprends pas comment justement il fait la liaison entre la table messages et la commande raise_application_error !!

    la structure de la table messages est
    MSGID VARCHAR2(40 BYTE) NOT NULL,
    MSGTITLE VARCHAR2(255 BYTE) NOT NULL,
    MSGTEXT VARCHAR2(255 BYTE) NOT NULL,
    MSGICON VARCHAR2(12 BYTE) NOT NULL,
    MSGBUTTON VARCHAR2(17 BYTE) NOT NULL,
    MSGDEFAULTBUTTON INTEGER NOT NULL,
    MSGSEVERITY INTEGER NOT NULL,
    MSGPRINT CHAR(1 BYTE) NOT NULL,
    MSGUSERINPUT CHAR(1 BYTE) NOT NULL

    je n'ai pas trouvé de script réécrivant la fonction/procedure raise_application_error mais bon il a peut être disparu.Si eventuellement on peut le faire.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est juste que quelqu'un a créé une procédure nommée RAISE_APPLICATION_ERROR , ou un synonyme vers une autre procédure.

  7. #7
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    ok

    bon je n'ai pas trouvé de script faisant cela mais bon possible que je n'ai pas bien cherché.

    Par contre dans toad , je devrais pouvoir la voir quelque part mais je ne vois rien non plus, c'est bizarre !!!

    je ne vois pas ou chercher maintenant, j'ai même regardé sous le user system mais je n'ai rien trouvé.

  8. #8
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Et dans le corps de cette procédure, il n'y a pas une section Exception qui traiterait le message ?

  9. #9
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    Bonjour,

    merci de répondre à mes messages.
    Pardon de ne pas avoir réagi avant.

    Voici un exemple d'une procédure et comme vous pouvez le voir nulle part apparait la table messages !!

    Par contre les codes -20600 ,-20601,-20602 ,-20603 sont des messages contenus dans la table messages.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    PROCEDURE p_creer_utilis ( p_logagent  IN utilisacii.logagent%TYPE,
             p_nni   IN utilisacii.nni%TYPE,
             p_pwdagent  IN utilisacii.pwdagent%TYPE,
             p_utilisat  IN utilisacii.logagent%TYPE
                         ) AS
     
     enregistrement_existe EXCEPTION;
     
     PRAGMA EXCEPTION_INIT(enregistrement_existe,       -00001);
     
        INTEGRITY_ERROR  EXCEPTION;
        errno            INTEGER;
        errmsg           CHAR(200);
        DUMMY            INTEGER;
        FOUND            BOOLEAN;
     
      v_errnoora   errors.errnoora%TYPE;
     v_errmsgora   errors.errmsgora%TYPE;
     
     
        --  DECLARATION DE LA CONTRAINTE INSERTCHILDPARENTEXIST POUR LE CODE DE "AGENT"
        CURSOR CPK1_UTILISACII(var_nni utilisacii.nni%TYPE) IS
           SELECT 1
           FROM   agent ag
           WHERE  ag.nni = var_nni;
     
    BEGIN
     
        --  LE CODE DE "AGENT" DOIT EXISTER POUR LA CREATION DE "UTILISACII"
        IF p_nni IS NOT NULL THEN
           OPEN  CPK1_UTILISACII(p_nni);
           FETCH CPK1_UTILISACII INTO DUMMY;
           FOUND := CPK1_UTILISACII%FOUND;
           CLOSE CPK1_UTILISACII;
           IF NOT FOUND THEN
              errno := -20600 ;
         errmsg := '%s' || p_nni || '%s' || p_logagent || '%f';
    --          errmsg := 'Code de "AGENT" inconnu. Creation de "UTILISACII" interdite.';
              RAISE INTEGRITY_ERROR;
           END IF;
      ELSE
       errno := -20602 ;
       errmsg := '%s'  || p_logagent || '%f';
           RAISE INTEGRITY_ERROR;
        END IF;
     
       INSERT INTO utilisacii (  logagent,
              nni,
              pwdagent
                             )
               VALUES ( p_logagent,
             p_nni,
             p_pwdagent
                       );
      COMMIT;
     
     
    --  GESTION DES ERREURS
    EXCEPTION
     
        WHEN INTEGRITY_ERROR THEN
           RAISE_APPLICATION_ERROR(errno, errmsg);
           ROLLBACK;
     
        WHEN enregistrement_existe THEN
           errno := -20601;
       errmsg := '%s'  || p_logagent || '%f';
           RAISE_APPLICATION_ERROR(errno, errmsg);
           ROLLBACK;
     
        WHEN OTHERS THEN
       errno:= -20603 ;
       errmsg := '%s' || p_logagent || '%s' || SQLERRM (SQLCODE) ||'%f';
        v_errnoora  := SQLCODE;
       v_errmsgora := SUBSTR(SQLERRM,1, 200);
       pkg_errors.p_enregistrer_erreur ( p_utilisat,
                  3,
                  'pkg_utilisateur.p_creer_utilis',
                  v_errnoora,
                  v_errmsgora,
                  errno,
                  errmsg
                  );
           RAISE_APPLICATION_ERROR(errno, errmsg);
         ROLLBACK;
     
    END p_creer_utilis  ;
    J'ai pas réussi à trouver si la procédure raise_application_error a été modifiée pour l'adapter et faire intervenir la table messages ( si c'est la façon de faire ).

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    pkg_errors.p_enregistrer_erreur ( p_utilisat,
                  3,
                  'pkg_utilisateur.p_creer_utilis',
                  v_errnoora,
                  v_errmsgora,
                  errno,
                  errmsg
                  );
    errmsg n'est pas en IN OUT par hasard ??

  11. #11
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut
    en fait la procedure p_enregistrer_erreur ne sert qu'à alimenter une table des erreurs mais ne sert pas à l'affichage du message pour l'application cliente.

    J'essayerais de rechercher de nouveau quand j'aurais un peu plus de temps mais c'est un peu perturbant de ne pas comprendre même si cela marche....

    Merci pour vos réponses.

Discussions similaires

  1. Requetes Impossible sur table utilisateur
    Par kfmystik dans le forum Développement
    Réponses: 8
    Dernier message: 21/07/2008, 17h24
  2. [SQL2K] Tables utilisateurs et DtProperties
    Par loggti dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/06/2008, 16h38
  3. securité tables utilisateurs
    Par leviet94 dans le forum Sécurité
    Réponses: 5
    Dernier message: 27/08/2007, 10h23
  4. Tables utilisateurs et Tables système
    Par widom dans le forum Administration
    Réponses: 10
    Dernier message: 11/06/2007, 11h34
  5. Sécurité Access, utiliser sa propre table utilisateur
    Par flash2590 dans le forum Sécurité
    Réponses: 2
    Dernier message: 12/12/2005, 16h47

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