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

Langage SQL Discussion :

Gestion des erreurs SQL


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Gestion des erreurs SQL
    Bonjour à vous,

    j'ai un léger problème !

    je voudrais en fait faire un fichier ".SQL" qui capturerait les possibles erreurs lors de l'exécution de ce fichier, et les mettrait dans une table SQL.

    Ainsi dans le programme suivant:
    - je fais un DECLARE, pour capturer par la suite les erreurs,
    - puis une boucle infinie While (1), afin que ce programme dure indéfiniment et que je puisse tranquillement "killer ce processus", simulant ainsi une erreur de connexion (je crois)
    - enfin, je tente de capturer l'erreur, et de la mettre dans la table ERREURS avec EXCEPTION...

    DECLARE err_code varchar(201); err_msg varchar(201);
    BEGIN

    while(0<1)
    loop
    insert
    into TABLE1 (id, libelle) VALUES
    (
    '1', 'nom'
    );
    end
    loop;
    EXCEPTION
    WHEN OTHERS THEN
    err_code := SQLCODE;
    err_msg := substr(SQLERRM,1,200);
    begin
    INSERT INTO ERREURS (nom, err_code, err_msg)
    VALUES('nom', err_code, err_msg);
    end;
    END;
    /

    De plus, TABLE1 et ERREURS sont créées ailleurs que dans ce fichier, ainsi:
    create table TABLE1 ( id varchar(50), libelle varchar(50));
    create table ERREURS (nom varchar(50), err_code varchar(50), err_msg varchar(50));


    Ainsi mes 2 problème sont les suivants :
    - quand je lance le fichier (avec sqlplus), et que je Kill son processus, rien n'est rajouté dans la TABLE1 (alors qu'il y a un insert valide...)
    - aucune erreur ne s'affiche non plus dans la table ERREURS (alors qu'une erreur de connexion devrait être affichée?)

    J'espère que vous avez une solution à mes problèmes!!!
    Merci d'avance,
    V.

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    150
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 150
    Points : 121
    Points
    121
    Par défaut
    est-ce que tu as essayé de faire un insert invalide au lieu de ton while infini?

    Je pense vraiment que le comportement de ton fichier sql est normal de la façon dont tu le fais rouler

  3. #3
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,

    Si je ne m'abuse, le mode par défaut d'Oracle est 'autcommit' à non.
    Qd tu tues ton travail, le moteur doit donc faire donc un 'rollback' d tt ce qui a été fait depuis le dernier commit ou le debut de la tx.
    Eassaies de rajouter un commit dans ta boucle.

    A +

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Re,

    j'viens de mettre un Commit dans ma boucle, et là, les données sont bien mises dans la table TABLE1.

    Mais je n'ai toujours rien dans la table ERREURS, même en y ayant ajouté un commit en plus... (g fait quelques tests sur l'emplacement du commit, comme je ne m'y connais pas trop)

    qu'est-ce qui est pas bon dans mon code alors ??

  5. #5
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    re,

    Le 'commit' ne résoud que le pb 'technique'.
    En fait je pense qu'il y a 1 pb de logique ds ce que tu veux faire.
    Ecrire ds 1 table les erreurs n'est cohérent que si c'est un erreur SQL style duplicate key, ou contrainte d'integrité non respectée etc...
    Mais si ta base est plantée tu ne pourras pas écrire ds 1 table le code d'erreur qui dit que la base est plantée...
    Je pense qu'il faudrait plutot que tu écrive tes traces dans un fichier .txt.

    A +

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Oui c'est vrai, quand ma connexion plante, je ne peux plus écrire dans une table !

    finalement j'ai testé avec une erreur de contrainte d'intégrité, et tout est bien stocké dans la table ERREURS... ce que je recherchais...

    merci bien pour ton aide (idem pour nadine, hein!)

    ciao,
    V.

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

Discussions similaires

  1. [Généralités] purge gestion des erreurs SQL
    Par Atsibat dans le forum WinDev
    Réponses: 6
    Dernier message: 20/02/2013, 19h43
  2. gestion des erreurs SQL
    Par nico84 dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/01/2010, 08h59
  3. Programmation PL/SQL gestion des erreurs
    Par delphine_lep dans le forum PL/SQL
    Réponses: 1
    Dernier message: 31/07/2006, 18h37
  4. [Débutant][PL/SQL] Gestion des erreurs
    Par weebib dans le forum Oracle
    Réponses: 4
    Dernier message: 13/06/2006, 16h22
  5. [J2EE/JSP] Gestion des erreurs avec une base SQL server 2005
    Par critok dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 30/04/2006, 16h57

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