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 :

[Oracle] Trace pour clarifier les erreurs


Sujet :

Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut [Oracle] Trace pour clarifier les erreurs
    Bonjour,

    Dans le cadre de mon stage de fin de Licence, j'ai réaliser un Package SQL dont l'une des procédures lance plusieurs autres procédures plus quelques insert et update.

    Seulement si je passe des informations fausses à la procédure, les erreurs d'oracle sont souvents assez difficile a comprendre.

    Sachant que ce package fait partie d'une application que je developpe destiné à des non-informaticiens, je voulais clarifier les erreurs afin que l'utilisateur puisse en trouver facilement la cause et effectuer la modification dans sa requete ou son script contenant l'ensemble de ses requetes.

    J'ai donc entendu parler des Traces qui permettent visiblement d'afficher des messages à la place de ceux d'oracle ou en plus (je sais pas trop).

    J'avoue ne pas connaître du tout et ne pas avoir trouver (j'ai peut-être mal cherché) de tuto sur l'utilisation des traces.

    Je viens donc sur ce forum vous demander votre aide.
    En effet, je cherche un exemple similaire ou un tutorial qui pourra m'aider à faire cette derniere partie de mon projet.

    Merci d'avance pour votre aide (si vous avez d'autres solutions, je suis également preneur).

    Cordialement

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par cyrille2k5
    si vous avez d'autres solutions, je suis également preneur
    J'en ai 2 :
    1/ pourquoi ne pas capturer les codes d'erreurs que peux lever ton application dans des exceptions que tu fais remonter jusqu'à générer un message compréhensible pour l'utilisateur ?
    2/ il existe un forum Oracle où il existe des membres réguliers TRES compétents et dans lequel tu devrais à un modérateur qu'il déplace ton post
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Magnus
    J'en ai 2 :
    1/ pourquoi ne pas capturer les codes d'erreurs que peux lever ton application dans des exceptions que tu fais remonter jusqu'à générer un message compréhensible pour l'utilisateur ?
    Effectivement c'etait plus ou moins mon idée ... la question c'est comment ?
    Parce que les EXCEPTION c'est pas trop le problème mais par contre générer le message compréhensible ça c'est deja plus problematique.

    Je vous donne en plus un exemple de ce que je voudrais

    Imaginons qu'on a une table a 2 colonnes Alias et Nom

    L'alias est sur 3 caractères et le Nom sur 250

    Bêtement je lance l'instruction suivante sur sqlplus :

    EXECUTE PKG_PERSO.MAJ (ALIAS => '1234', Nom => 'Moi');
    (La Procedure MAJ mettant à jour la table "TABLE")

    Je voudrais en gros que ça me retourne :

    "ALIAS INCORRECT" ou encore mieux "ALIAS TROP GRAND"

    Merci d'avance pour votre aide

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 165
    Points
    165
    Par défaut
    Vous pouvez gérer des sorties d'erreurs avec l'instruction :

    "RAISE_APPLICATION_ERROR" dans un bloc d'exception

    et/ou :

    Associer un code erreur Oracle à vos propres variables exception à l'aide du mot clé PRAGMA EXCEPTION_INIT, dans le cadre de la section déclarative de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Nom_exception EXCEPTION ;
    PRAGMA EXCEPTION_INIT(nom_exception, -code_error_oracle);
    Voir le lien suivant :

    http://sheikyerbouti.developpez.com/pl_sql/?page=Chap1

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    nikel C'est exactement ce que je cherchais

    Merci à tous pour votre aide
    juste une petite chose ... comment puis-je dire que le "trop long" est du a l'alias et non au nom par exemple ?

    merci d'avance pour ces dernieres précisions

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 165
    Points
    165
    Par défaut
    Je ne comprend pas bien ta question ...

    Si Tu passes 2 paramètres en entrée de ton package, il ne te reste qu'à les tester une fois à l'intérieur de celui-ci ...

    Exemple :

    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
     
    set serveroutput on size 100000;
    SQL>
    declare
    vl_alias varchar2(4000);
    begin
    vl_alias :='123456';
    if length(vl_alias)>5 then
             raise_application_error(-20000,'ALIAS TROP LONG');
     end if;
     end;
    /
    declare
    *
    ERREUR à la ligne 1 :
    ORA-20000: ALIAS TROP LONG
    ORA-06512: a ligne 6

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    ok et dans le cas d'un type incompatible ...

    Imaginons qu'on a en plus des deux autres colonnes une colonne "date_de_naissance" au format date ou Number et que je passe

    EXECUTE PKG_PERSO.MAJ (ALIAS => '123', Nom => 'Moi', DATE_DE_NAISSANCE => 'erreur');


    PS. : en réalité j'ai plus de deux colonnes seulement je suis pas autorisé à vous reveler mon travail.

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Bon suite à une discussion avec mon chef de projet, on va laisser tomber la personnalisation des erreurs car il est impossible de recuperer les erreurs dues a des procedures appelés (sans modifier ces dites procédures).

    Seulement il voudrait qu'a la fin du script sql, on nous donne le nombre de requetes executées et le nombre d'erreurs.

    en gros supposons qu'on a un script avec 30 lignes du types :

    EXECUTE PKG_PERSO.MAJ (ALIAS => '123', Nom => 'Moi', DATE_DE_NAISSANCE => '01/01/1980');

    on veut savoir combien ce sont bien executés, combien on a eu d'erreurs, et combien il y en avait au total (sachant que le nombre de lignes varies regulièrement)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2006
    Messages : 133
    Points : 165
    Points
    165
    Par défaut
    Normalement le paramètre d'entrée doit être déclaré en tant que "date", donc si on ne lui passe pas une date, l'execution échouera ...

    Si tu déclares ton paramètre en tant que Varchar2 par exemple, il suffira alors de tester le "transtypage" en date :

    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
     
    SQL> select to_date('toto', 'DD/MM/YYYY') from dual;
    ERREUR à la ligne 1 :
    ORA-01858: caractere non numerique rencontre a la place d'un numerique
     
    SQL> select to_date('15051999', 'DD/MM/YYYY') from dual;
     
    TO_DATE(
    15/05/99
     
    SQL> select to_date('15-05-1999', 'DD/MM/YYYY') from dual;
     
    TO_DATE(
    15/05/99
     
    SQL>  select to_date('15TT-05-1999', 'DD/MM/YYYY') from dual;
     
    ERREUR à la ligne 1 :
    ORA-01861: le litteral ne concorde pas avec le format chaine de caracteres
     
     
    SQL>  select to_date('123-45-678', 'DD/MM/YYYY') from dual;
    ERREUR à la ligne 1 :
    ORA-01861: le litteral ne concorde pas avec le format chaine de caracteres
    Le mieux est de tester tout cela en amont si possible ...

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    OK Merci pour ton aide

    @ Bientôt

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

Discussions similaires

  1. Méthode pour trapper les erreurs
    Par Bigmen dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 17/11/2008, 15h31
  2. probleme pour afficher les erreurs de frappe
    Par Asmod_D dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/06/2007, 21h26
  3. utilitaire pour corriger les erreurs disk
    Par mouna201 dans le forum Composants
    Réponses: 2
    Dernier message: 17/11/2006, 12h07
  4. 2.pl lancé par 1.pl : pb pour traiter les erreurs
    Par kafifi dans le forum Langage
    Réponses: 8
    Dernier message: 18/11/2005, 00h07

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