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 :

récupérer table et user dans une fonction


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut récupérer table et user dans une fonction
    Bonjour,

    sur différentes tables, j'ai 2 champs usermaj et datemaj que je veux remplir automatiquement lors d'un insert ou update sur un tuple.
    J'ai donc pensé à créer uen fonction générique qui sera appelée par un trigger que je vais mettre sur toutes mes tables.
    Ma question est donc : comment récupérer le nom de la table sur laquelle je suis en train de travailler ainsi que le nom de l'utilisateur qui effectue l'insert ou le update ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    dans ta fonction trigger tu peux récupérer le nom de la table dans la variable prédéfinie TG_RELNAME. Mais je ne pense pas que tu en aies besoin. Tes deux champs portant le même nom dans toutes tes tables, tu peux les mettre à jour en passant par les variables NEW.usermaj et NEW.datemaj sans pour autant que la fonction sache dans quel contexte (la table) elle s'exécute.

  3. #3
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    oki merci.

    Par contre je vais faire mon boulet en posant cette question : j'ai juste à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BEGIN
    	new.datemaj := now();
    END;
    ?? car ça n'a pas l'air de fonctionner quand je mets ma fonction dans le trigger

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Pas exactement. Pour que ça fonctionne, trois conditions doivent être réunies :

    • Ta fonction trigger doit retourner l'enregistrement modifié :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      BEGIN
        NEW.datemaj := now();
        RETURN NEW;
      END;
    • Assure-toi que la fonction est bien appelée pour BEFORE UPDATE et BEFORE INSERT ; si tu l'actives pour AFTER UPDATE ou AFTER INSERT, rien ne se passe car elle est activée a posteriori, et il est donc trop tard pour qu'elle opère des modifications sur l'enregistrement (par contre, il est encore possible de faire échouer la transaction avec RAISE EXCEPTION).
    • Il faut que la fonction retourne un type TRIGGER

  5. #5
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    oki merci pour ces précisions ça marche nikel.

  6. #6
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    excuse moi mais par la même occasion connaitrais tu une table qui puisse me donner l'utilisateur qui exécute la fonction. peut être une table système tel pg_user mais il y en a tellement que je ne trouve pas mon bonheur.

    Merci d'avance

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Pas besoin d'accéder aux tables systèmes, il suffit d'utiliser la fonction session_user :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NEW.usermaj := session_user;
    Attention, bien que ce soit une fonction, ne pas mettre les parenthèses après session_user (norme SQL).

  8. #8
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    merci c'est parfait !!!

    c'est ça l'entraide entre papy et grand père
    Encore merci

    A+

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

Discussions similaires

  1. Récupérer tous les id dans une fonction récursive
    Par renaud26 dans le forum jQuery
    Réponses: 2
    Dernier message: 02/06/2015, 20h49
  2. Récupérer un variable globale dans une fonction.
    Par toufou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/08/2010, 14h42
  3. Récupérer le nom d'une table dans une fonction
    Par Milo59000 dans le forum SQL
    Réponses: 5
    Dernier message: 13/02/2008, 15h40
  4. Réponses: 1
    Dernier message: 20/06/2007, 08h20
  5. récupérer un tableau PHP dans une fonction javascript
    Par aztec dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/05/2007, 22h11

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