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

PL/SQL Oracle Discussion :

Trigger sysdate et clé primaire


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut Trigger sysdate et clé primaire
    Bonjour,

    Dans le cadre de l'utilisation de SQL Loader (voir mon topic ici) j'ai crée un trigger qui met à jour la date de création de l'enregistrement inséré.

    Le souci est que j'ai une clé primaire sur le couple (date_creation, nom) et mon trigger insère la même date pour toutes les lignes Je pensais avoir un décalage au niveau des millièmes de secondes mais non :
    DATE_CREA NOM_FILLE
    ---------------------- ------------
    2009-01-27 11:14:57.0 DUPONT
    2009-01-27 11:14:57.0 MARTEAU
    2009-01-27 11:14:57.0 MACHIN

    Comment puis-je faire pour que la date diffère ? J'aimerais qqch comme ça :

    DATE_CREA NOM_FILLE
    ---------------------- ------------
    2009-01-27 11:14:57.0 DUPONT
    2009-01-27 11:14:58.1 MARTEAU
    2009-01-27 11:14:59.2 MACHIN

    ou comme ça :

    DATE_CREA NOM_FILLE
    ---------------------- ------------
    2009-01-27 11:14:57.0 DUPONT
    2009-01-27 11:14:58.0 MARTEAU
    2009-01-27 11:14:59.0 MACHIN

    Comment puis-je faire ?

    D'avance merci

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Cela aurait été plus simple d'utiliser une séquence.

  3. #3
    Membre expérimenté
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Par défaut
    Bonjour,

    As-tu essayé un TIMESTAMP au lieu d'un champ DATE ?

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par babylone7 Voir le message
    Bonjour,

    Dans le cadre de l'utilisation de SQL Loader (voir mon topic ici) j'ai crée un trigger qui met à jour la date de création de l'enregistrement inséré.

    Le souci est que j'ai une clé primaire sur le couple (date_creation, nom) et mon trigger insère la même date pour toutes les lignes Je pensais avoir un décalage au niveau des millièmes de secondes mais non :
    DATE_CREA NOM_FILLE
    ---------------------- ------------
    2009-01-27 11:14:57.0 DUPONT
    2009-01-27 11:14:57.0 MARTEAU
    2009-01-27 11:14:57.0 MACHIN

    Comment puis-je faire pour que la date diffère ? J'aimerais qqch comme ça :

    DATE_CREA NOM_FILLE
    ---------------------- ------------
    2009-01-27 11:14:57.0 DUPONT
    2009-01-27 11:14:58.1 MARTEAU
    2009-01-27 11:14:59.2 MACHIN

    ou comme ça :

    DATE_CREA NOM_FILLE
    ---------------------- ------------
    2009-01-27 11:14:57.0 DUPONT
    2009-01-27 11:14:58.0 MARTEAU
    2009-01-27 11:14:59.0 MACHIN

    Comment puis-je faire ?

    D'avance merci
    changer de primary key !

    espérer que le cas d'un éventuel homonyme soit résolu uniquement par le hasard d'un timestamp différent n'est pas une très bonne idée …

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    JeitEmgie , mon exemple ici est avec des noms, mais mon cas réel concernera des numéros de commande, on ne doit pas traiter 2 fois la même commande à un instant t en principe

    Mathias44 je vais essayer merci

    SheikYerbouti oui j'en suis arrivée là, à me dire que je vais créer un id mais ca remet en cause tout le reste du développement déjà accompli

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    Mathias44 ça fait pareil avec un timestamp

  7. #7
    Membre expérimenté
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Par défaut
    Alors là babylone7 tu m'étonnes

    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
    SQL> create table matable (madate timestamp);
     
    Table created.
     
    SQL> insert into matable select sysdate from dual;
     
    1 row created.
     
    SQL> insert into matable select systimestamp from dual;
     
    1 row created.
     
    SQL> select * from matable;
     
    MADATE
    ---------------------------------------------------------------------------
    27-JAN-09 02.54.01.000000 PM
    27-JAN-09 02.54.07.748736 PM

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Par défaut
    En effet j'ai testé les 2 select
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sysdate FROM dual;
     
    SELECT sytimestamp FROM dual;
    et j'obtiens comme toi !

    Mais tu parles d'utiliser sytimestamp dans le trigger ?
    Car en fait pour mon test j'ai modifié ma colonne DATE_CREA en TIMESTAMP, j'ai supprimé le trigger et j'ai fait mon sql loader en ajoutant "DATE_CREA TIMESTAMP"

    mais je vais modifier ca au niveau du trigger

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 19/07/2010, 23h48
  2. trigger clé primaire
    Par claire13 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/11/2008, 10h06
  3. Lister clés primaires, etrangères et triggers d'un base
    Par Oliveuh dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/05/2008, 23h26
  4. Clefs primaires assignées par trigger
    Par Costalfy dans le forum Hibernate
    Réponses: 8
    Dernier message: 10/08/2007, 11h59
  5. trigger pour tester une clé primaire
    Par keumlebarbare dans le forum PL/SQL
    Réponses: 3
    Dernier message: 15/04/2007, 10h29

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