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 expérimenté
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    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 confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    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.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

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

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    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 confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    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
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

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

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

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

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

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    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 confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    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).
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

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

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    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