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

Requêtes PostgreSQL Discussion :

Procédure/fonction d'incrémentation sous postgreSQL


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Par défaut Procédure/fonction d'incrémentation sous postgreSQL
    Bonsoir à tout le monde!
    J'ai débuté avec postgres il n' y'a pas très longtemps.
    Jusque là les requêtes (SELECT, UPDATE , DELETE INSERT, ALTER...) ne pose plus assez de problème et cela grâce à votre soutien.

    Maintenant les choses sérieuses commencent.je besoin de votre concours sur un problème: les procédures et/ou fonction.

    j'aimerai savoir s'il est possible de créer horloge (ou un compteur) avec une procédure ou une fonction.

    je m'explique. dans ma BD j'ai un champs burn de types booléen qui teste si c'est la première fois qu'on exécute l'application. Si c'est le cas(burn=False ), la procédure ou fonction d'incrémentation se déclenche.

    L'objectif est de compter le nombre d'heure ou de jour à partir du premier jour ou l'application a été exécutée.

    Si quelqu'un à une autre façon de procéder son aide sera la bienvenue.
    D'avance merci.

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 245
    Par défaut
    Bonjour
    Vous pouvez faire un champ de type serial qui s' auto incrémente par insertion d'enregistrements
    Bon courage

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Par défaut
    Bonsoir bustaf!
    merc pour les encouragements.
    Pour le sérial number je pense que cà résoud le problème de façonstatique c'est à dire que c'est suite à un INSERT que l'incrémentation se produit
    Merci d'avoir essayer bon weekend!

  4. #4
    Membre Expert Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Par défaut
    Citation Envoyé par rolls Voir le message
    je m'explique. dans ma BD j'ai un champs burn de types booléen qui teste si c'est la première fois qu'on exécute l'application. Si c'est le cas(burn=False ), la procédure ou fonction d'incrémentation se déclenche.
    Tu peux créer un trigger sur l'événement "before insert" ou "before update" qui teste la valeur de burn :
    Si burn = false, alors tu insères id = nextval(sequence)
    La théorie, c'est quand on sait tout mais que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
    Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

    Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/

  5. #5
    jnore
    Invité(e)
    Par défaut
    Salut

    On peut effectivement gérer ce genre de compteur. Les solutions déjà proposées sont valables.

    Personnellement, j'ai pris pour habitude d'insérer sur chacune de mes tables un timestamp qui a pour valeur par défaut --> now().

    On sait exactement à quel moment la ligne est insérée. On peut déduire plein de choses temporelles avec ce procédé...Après je ne sais pas si cela répond à ton besoin !

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2007
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 310
    Par défaut
    Bonjour à vous!
    Citation Envoyé par scheu Voir le message
    Tu peux créer un trigger sur l'événement "before insert" ou "before update" qui teste la valeur de burn :
    Quand l'application est lancée pour la prémière fois je fait une mise à jour de burn (burn=True). je pense que le trigger sur l'évènement "before update conviendrait"

    Mon problème n 'est pas totalemen résolu

    voici ce que je veux réaliser:
    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
    16
    17
    18
    
    CREATE FUNCTION compteur( test as Boolean)
    -- test est le resultat d'un SELECT (Le SELECT retourne la valeur de burn) 
    DECLARE
    	resultat As Boolean; 
    	tampon tampon1 As Integer 
             tampon1:=1000
    BEGIN
    	IF test=False THEN
    		WHILE resultat=True AND tampon < tampon1
    		         tampon:=tampon+1;
    	         End LOOP
    	ELSE
    		-- je ne fait rien
    	END IF;
    END;
    $$ LANGUAGE plpgsql;
    Seulement comme je l'ai dit dans mon premier message pour ce qui est des procédure je n'y connais rien

    L'objectif est de verrouiller l'accès de certaine table quand tampon sera égal a tampon1 (tampon=tampon1)

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/06/2023, 15h52

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