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

Langage SQL Discussion :

Age d'un enregistrement


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Age d'un enregistrement
    Bonjour à tous.

    J'ai trouvé dans un coin de ma mémoire, la trace d'une possibilité d'obtenir, via les tables système du SGBD, l'âge (ou la date de création) d'un enregistrement donné.
    Cela parle-t-il à quelqu'un, ou est-ce un fantasme créé artificiellement par un cerveau en surcharge ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    La seule façon de connaitre la date et l'heure de création d'une ligne de BDD et la date et l'heure de MàJ de cette ligne, est d'avoir des colonnes dédiées à cet usage dans les tables
    Ces colonnes peuvent éventuellement être alimentées automatiquement au moyen de trigger, sinon c'est à l'application de s'en charger.

    Le journal de transaction, en fonction du SGBD que vous utilisez, permet de connaître les modifications effectuées, mais il n'a pas vocation à moucharder l'horodatage pour une utilisation fonctionnelle.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Arrrgh !

    J'espérais attendre encore un peu avant de prendre des vacances...
    Merci pour ta réponse.

  4. #4
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Citation Envoyé par escartefigue Voir le message
    La seule façon de connaitre la date et l'heure de création d'une ligne de BDD et la date et l'heure de MàJ de cette ligne, est d'avoir des colonnes dédiées à cet usage dans les tables
    Ces colonnes peuvent éventuellement être alimentées automatiquement au moyen de trigger, sinon c'est à l'application de s'en charger.
    Il y a la possibilité aussi de préciser une valeur par défaut correspondant à la date au moment de l'enregistrement.

    Par exemple, sous SQL Server :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE dated_row(
    id INT IDENTITY,
    date_creation DATETIME2 DEFAULT GETDATE(),
    PRIMARY KEY(id)
    );
     
    INSERT INTO dated_row DEFAULT VALUES;

    La ligne insérée aura automatiquement la colonne date_creation de renseignée.

    En plus d'être plus légère, je préfère cette approche à celle des triggers pour des raisons de maintenance.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    @ Dorinf : je suis d'accord, c'est une solution à la fois fiable et économe en maintenance

    Cela étant, il faut aussi connaitre le SGBD, tous ne proposent pas les mêmes fonctionnalités

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Ah ouai, ça me plait bien ça.
    Merci dorinf.

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Cela étant, il faut aussi connaitre le SGBD, tous ne proposent pas les mêmes fonctionnalités
    Tout à fait, mais j'ai regardé rapidement, et tous les grands (aheum tousse tousse) SGBD supporte cette fonctionnalité. Pardon, j'ai pas regardé pour Oracle, mais pour Postgres, MySQL/MariaDB oui
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par dorinf Voir le message
    Bonjour,
    Il y a la possibilité aussi de préciser une valeur par défaut correspondant à la date au moment de l'enregistrement.

    Par exemple, sous SQL Server :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE dated_row(
    id INT IDENTITY,
    date_creation DATETIME2 DEFAULT GETDATE(),
    PRIMARY KEY(id)
    );
     
    INSERT INTO dated_row DEFAULT VALUES;

    La ligne insérée aura automatiquement la colonne date_creation de renseignée.

    En plus d'être plus légère, je préfère cette approche à celle des triggers pour des raisons de maintenance.

    Il y a beaucoup mieux !!!! En effet la norme SQL 2011 a entériné le principe des tables temporelles, c'est à dire des tables dotées de propriétés de traçage automatique des INSERT, UPDATE et DELETE dans le temps !
    À l'aide de ce mécanisme, la table ainsi temporalisée se voit dotée de 2 nouvelles colonnes début et fin. La date début étant celle de l'insertion et la date de fin toujours du 9999-12-31 0h
    En cas d'update, la date de début est réajustée à l'heure de l'update et une table d'historisation créé automatiquement pour ce besoin, reçoit l'ancienne ligne avec les valeurs passées, y compris date de début et comme date de fin celle de l'UPDATE.
    En cas de delete, la ligne est réellement supprimée de la table et reportée dans la table d'historisation avec comme date de fin celle du DELETE.
    Pour parfaire ce mécansime, des opérateurs temporels spéciaux permetent de "voir" les données à tout instant du temps.

    Ceci est implémenté dans SQL Server 2016 tel quel, dans oracle à la sauce Oracle, mais ni dans MySQmerde ni Dans PostGreSQL...

    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/ * * * * *

Discussions similaires

  1. Compter enregistrements dans une fourchette d'age
    Par Christ79 dans le forum IHM
    Réponses: 11
    Dernier message: 17/10/2013, 08h06
  2. [VB6] [Crystal] Selection enregistrement
    Par littlecow dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/01/2005, 13h08
  3. Enregistrer un RichEdit dans un .Txt
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 06/08/2002, 11h52
  4. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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