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 :

Problème de date avec un trigger PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut Problème de date avec un trigger PL/SQL
    Hello,

    Je suis en train de mettre à jour un trigger pour une table. Jusqu'à maintenant, à un moment donné dans mon trigger, j'ai toujours utilisé un INSERT INTO maTable VALUES('...', to_date(SYSDATE, 'DD.MM.YYYY HH24:MI:SS'), ...) ce qui fonctionnait très bien.

    Pour gagner en souplesse, j'ai dû adapter mon trigger et j'utilise maintenant un EXECUTE IMMEDIATE 'INSERT INTO maTable VALUES ('...', to_date(SYSDATE,'DD.MM.YYYY HH24:MI:SS'), ...)'.

    Depuis que je fais cela, oh horreur, mon champ de date n'est plus renseigné correctement; à la place d'avoir le jour et l'heure comme demandé, il n'y a plus que le jour qui est enregistré!

    Quelqu'un a-t-il une idée de solution, afin que je puisse à nouveau enregistrer également l'heure dans mon champ DATE???

    Merci d'avance!

  2. #2
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 57
    Points : 47
    Points
    47
    Par défaut
    Corrigez moi si je me trompe, mais

    to_date(SYSDATE,'DD.MM.YYYY HH24:MI:SS')
    est strictement équivalent à sysdate seul, non?

    Essaye ca pour voir...

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    J'ai essayé aussi, mais en désespoir de cause, je me suis dit que ça ne pouvait pas aller plus mal en spécifiant le format voulu.



    Citation Envoyé par Endymion222
    Corrigez moi si je me trompe, mais

    to_date(SYSDATE,'DD.MM.YYYY HH24:MI:SS')
    est strictement équivalent à sysdate seul, non?

    Essaye ca pour voir...

  4. #4
    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
    Effectivement, SYSDATE tout seul sera bien plus simple !
    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

  5. #5
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET NLS_DATE_FORMAT ='DD-MON-YYYY HH24:MI:SS';
    on'a
    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
    19
    20
     
    SQL> select sysdate from dual;
     
    SYSDATE
    ---------
    18-JAN-06
     
    SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual;
     
    TO_CHAR(SYSDATE,'DD-
    --------------------
    18-JAN-2006 14:37:18
     
    SQL> ALTER SESSION SET NLS_DATE_FORMAT ='DD_MON-YYYY HH24:MI:SS';
     
    SQL> select to_date(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual;
     
    TO_DATE(SYSDATE,'DD-
    --------------------
    18-JAN-2006 14:44:33

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    En effet, avec ça, ça marche .

    Mais j'ai tout de même un peu peur: maintenant, je viens de changer la valeur par défaut pour toute la session, ce qui veut dire que tous les traitements qui viennent après et qui contiennent une date pourraient être influencés, non?

    Il n'y aurait pas quelque chose de plus local?

    Citation Envoyé par bouyao
    essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET NLS_DATE_FORMAT ='DD-MON-YYYY HH24:MI:SS';
    on'a
    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
    19
    20
     
    SQL> select sysdate from dual;
     
    SYSDATE
    ---------
    18-JAN-06
     
    SQL> select to_char(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual;
     
    TO_CHAR(SYSDATE,'DD-
    --------------------
    18-JAN-2006 14:37:18
     
    SQL> ALTER SESSION SET NLS_DATE_FORMAT ='DD_MON-YYYY HH24:MI:SS';
     
    SQL> select to_date(sysdate,'DD-MON-YYYY HH24:MI:SS') from dual;
     
    TO_DATE(SYSDATE,'DD-
    --------------------
    18-JAN-2006 14:44:33

  7. #7
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Je suis d'accord avec SheikYerbouti

    Doc oracle
    SYSDATE returns the current date and time. The datatype of the returned value is DATE.

    Donc si le champs à renseigner est de type DATE utilise sysdate

    Ensuite
    to_date = Retourne une date à partir d'une chaine de caractère (cette fonction demande une chaine de caractère et la définition de la chaine/date "FORMAT") .
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> select to_date('01/11.2006','DD/MM.YYYY') dt from dual;
     
    DT
    --------
    01/11/06
     
    SQL> select to_date('01/11.2006 15,56§14','DD/MM.YYYY HH24,MI§SS') dt_time from dual
      2  ;
     
    DT_TIME
    --------
    01/11/06
    Les deux résultats retournés sont des valeurs DATE. (suivant le paraetrage de ton client ORACLE, il affiche ou pas les heures)

    Donc il faut savoir le format de la chaine ('01/11.2006 15,56§14') pour préciser à oracle ou se trouve l'année, les huers, minutes mois.... ('DD/MM.YYYY HH24,MI§SS')

    Si tu fais un to_date en passant en paraètre une date à la place de la chaine de caractère comment sais tu son format ???

    Conclusion ; si tu travailles avec des données date en émission (sysdate) et en réception (le champs à alimenter) garde le format ne joue pas avec les type de données, tu vas te perdre et oracle ne sera plus koi faire.

    Si tu as une chaine en emission et une date en réception utilise to_date
    Si tu as une date en emission et une chaine en réception utilise to_char

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

Discussions similaires

  1. Problème de date avec SQL Server
    Par gide_x dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 22/07/2007, 11h37
  2. [C#] Problème de Date avec Access
    Par k2vin dans le forum Accès aux données
    Réponses: 4
    Dernier message: 12/12/2006, 15h57
  3. Problème de date avec JAVA & Oracle
    Par bobic dans le forum JDBC
    Réponses: 2
    Dernier message: 02/11/2006, 12h21
  4. [FPDF] Problème de date avec fdpf
    Par axel-erator dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/05/2006, 23h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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