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

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    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 éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Cela aurait été plus simple d'utiliser une séquence.
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

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

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

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

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

  7. #7
    Membre habitué
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Points : 181
    Points
    181
    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 régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    214
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    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

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    Ca marche Mathias44

    Merci beaucoup !!

    Tu serais pas doué en SqlLoader aussi par hasard ? J'ai des soucis sur mon topic mais j'ai pas de réponse

  10. #10
    Membre habitué
    Inscrit en
    Janvier 2009
    Messages
    162
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 162
    Points : 181
    Points
    181
    Par défaut
    Le timestamp est + précis mais il y a une contrepartie en termes de stockage : 7 octets pour un champ DATE contre jusqu'à 11 pour un TIMESTAMP.

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    Oui je ne vais l'utiliser que pour cette date là, les autres resteront en DATE, en espérant que les développements deja en place seront compatible

    Merci bcp !!

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    Par contre avant, quand mon champ était une date, pour avoir les données du jour je mettais dans ma clause WHERE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DATE_CREA LIKE SYSDATE
    Maintenant avec un timestamp, j'ai tenté un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DATE_CREA LIKE SYSTIMESTAMP
    mais cela ne fonctionne pas.

    Du coup, je n'ai rien trouvé de mieux que cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE  TO_DATE(TO_CHAR(DATE_CREA,'yyyy-MM-dd'), 'yyyy-MM-dd')  LIKE TO_DATE(TO_CHAR(SYSTIMESTAMP,'yyyy-MM-dd'), 'yyyy-MM-dd')
    Qu'en pensez-vous ?

  13. #13
    Expert éminent sénior
    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
    Points : 11 862
    Points
    11 862
    Par défaut
    Essayez la fonction TRUNC()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select SYSTIMESTAMP, trunc(SYSTIMESTAMP) from dual
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 214
    Points : 84
    Points
    84
    Par défaut
    Merci SheikYerbouti ça marche super bien c'est exactement ce que je cherchais

+ 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