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

PostgreSQL Discussion :

exception qui annule mes Inserts


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut exception qui annule mes Inserts
    Bonjour.

    J'ai fais une fonction qui selon les conditions fait un RAISE EXCEPTION.
    Jusque la tout va bien.

    Mon probleme est que, avant de lever l'exception, je veux faire un insert dans une table de log. Or le RAISE visiblement annule toutes les requettes qui ont eu lieu dans ma fonction, dont mon fameux Insert.

    Comment faire svp dans une fonction, pour faire un INSERT avant un RAISE EXCEPTION qui ne soit pas annulé par ce dernier?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Postez le code de votre fonction et un exemple d'appel.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Bonjour, et merci pour votre attention.

    Voici un exemple, purement academique mais représentatif du but souhaité (voir ses commentaires):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE OR REPLACE FUNCTION "MaFunc"(userid integer) 
    BEGIN; 
    IF userid = 0 THEN 
         --Je veux forcer ce Insert!!!!!!!!!!!!!!!!!! 
         INSERT INTO log_error(caller, description) VALUES('MaFunc', 'userid is 0'); 
         -- Et je veux aussi que cette exception soit levée
         RAISE EXCEPTION 'userid can''t be equal to 0'; 
    ENDIF; 
    END;

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Le RAISE EXCEPTION provoque un ROLLBACK qui annule l'effet de l'INSERT.
    Pour éviter cela il faudrait que l'INSERT soit dans une transaction autonome, mais postgres n'a pas cette fonctionnalité.
    On peut quand même arriver à un résultat similaire avec le module dblink qui permet d'ouvrir une autre connexion indépendante à la base, tout en restant dans le contexte d'une fonction serveur.

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    aie

    et en prennant le probleme à l'envers :
    peut on créer un trigger abonné au raise exception?

    comme il s'executerait apres, je pourrait en fonction du code erreur/message faire mon insert dedans !?!?

    En fait je ne veux pas dépendre du client qui pourrait oublier de logguer certaines exceptions (entre autre erreur/oubli possible de la part d'un client).

    PS : ca me serait tres difficile d'ajouter un module à postgres.

    Merci encore pour votre aide.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Sans ajouter de module, je ne connais pas de solution à ce problème.

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

Discussions similaires

  1. [AC-2007] Requete INSERT INTO qui écrase mes enregistrements
    Par Azomix dans le forum VBA Access
    Réponses: 4
    Dernier message: 30/01/2012, 19h15
  2. Réponses: 3
    Dernier message: 16/01/2009, 10h49
  3. [Res]Procédure stockée qui fait un insert basé sur un select
    Par wonderliza dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/12/2005, 18h25
  4. lenteur lors de mes insert into
    Par shiners300 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 19/09/2005, 13h49
  5. Annuler une insertion dans un Trigger
    Par dreamanoir dans le forum Oracle
    Réponses: 2
    Dernier message: 10/01/2005, 13h04

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