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

SQL Procédural MySQL Discussion :

Enregistrer une requête dans une table de Log


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut Enregistrer une requête dans une table de Log
    Bonjour,

    J'essaye de créer une table de log dans ma base de données et j'aimerais pouvoir y stocker l'intitulé des requêtes qui modifie la base.

    Pour exemple , voici ce que j'aimerais avoir dans ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    +---------------------+-------+--------------------------------------------------------------------------+-------------+
    | DATE                | TABLE | REQUETE                                                                  | COMMENTAIRE |
    +---------------------+-------+--------------------------------------------------------------------------+-------------+
    | 2007-05-21 14:59:25 | FAC   | 420                                                                      |             |
    | 2007-05-21 15:09:47 | FAC   | INSERT FAC (SIRET,CCM,COMMUNE) VALUES
    (NEW.SIRET,NEW.CCM,NEW.COMMUNE); | BLABLA      |
    +---------------------+-------+--------------------------------------------------------------------------+-------------+
    Je ne sais pas comment obtenir la colonne REQUETE automatiquement. J'arrive seulement à afficher le numéro de la ligne qui a été inséré.

    Quelqu'un aurait-il une idée ?

    Merci

  2. #2
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    Si ça peut t'aider moi je traite ça directement dans le code

    Aprés chaque INSERT, j'appelle une proc stockée que j'ai faite qui insere les données dans ma table de log.

    En gros apres chaque insert il te suffit d'appeller ta proc stockée en y mettant les bonnes valeurs pour les differents champs.

    tu vois ce que je veux dire ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    Je ne vois pas vraiment ce que tu veux dire en fait.
    Je n'ai jamais utilisé de procédure stockée et plus la requête que je dois stocker ne sera pas forcément un insert, ça peut être aussi bien delete ou update et ceux-ci sur plusieurs tables.

    Sinon, tu aurais un exemple à me donner ? Voir un petit peu à quoi ça ressemble au niveau du code.

    Merci

  4. #4
    Membre éclairé Avatar de pop_up
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2006
    Messages : 877
    Points : 786
    Points
    786
    Par défaut
    si j'adapte ca a toi ca donnerai

    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
     
    DROP PROCEDURE IF EXISTS PRC_LOG;
     
    CREATE PROCEDURE PRC_LOG (IN p_date DATE,
                                        IN p_table VARCHAR(255),
                                        IN p_requete TEXT, 
                                        IN p_com VARCHAR(255))
     
    BEGIN
     
     
    	INSERT INTO LOG(date, table, requete, commentaire)
    		VALUES (p_date, p_table, p_requete, p_com);
     
    END;

    et apres chaque requete que tu fais tu mets par exemple

    CALL PRC_LOG(now(), ta table, ta requete, ton commentaire);


    tu vois un peu mieux ce que je veux dire ?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 42
    Points : 31
    Points
    31
    Par défaut
    L'inconvénient c'est que ta méthode n'est pas automatique. Il faut appeler ta procédure après chaque requête, c'est pas très pratique.
    Et étant donné que les gens qui vont utiliser la base ne s'y connaisse pas du tout en sgbd, ils vont pas penser à lancer la procédure.

    L'idéal serait encore une fois que cela se fasse automatiquement à chaque requête qui modifie les tables. Par un trigger ce serait nickel mais je ne connais pas la méthode pour faire ce que je veux.

    J'arrive juste à récupérer le numéro de l'enregistrement que j'ajoute , modifie et supprime.

    Quelqu'un aurait-il une autre idée ?

  6. #6
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Avec des triggers ça ne marchera que pour les UPDATE et INSERT, il en faudra 2 par table qui recontitueront les requêtes et ça va être moche.

    Pour moi le plus simple... c'est d'activer le log général de MySQL, il donne toutes les requêtes Eventuellement le log binaire mais il n'y aura pas les SELECT.

    Sinon pour avoir ça en base il faudrait faire une procédure/classe qui englobe les appels à la BDD et y ajoute la sauvegarde de la requête. Et forcer les développeurs à l'utiliser. Un simple grep sur le code devrait permettre de trouver les vilains qui accèdent directement à la BDD

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

Discussions similaires

  1. Réutiliser des données d'une requête dans une requête
    Par mims1664 dans le forum Requêtes
    Réponses: 12
    Dernier message: 06/02/2009, 14h12
  2. enregistrer le résultat d'une requête dans une variable
    Par veriecherie dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 08/07/2008, 14h17
  3. Enregistrer un calcul d'une requête dans une table
    Par baila dans le forum Requêtes et SQL.
    Réponses: 20
    Dernier message: 06/08/2007, 13h05
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. Réponses: 4
    Dernier message: 01/12/2005, 14h36

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