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

Oracle Discussion :

[9i] Problème timestamp


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut [9i] Problème timestamp
    Dans ma base j'ai une table qui contient une colonne de type timestamp
    le problème est que dans des postes clients le système me permet d'insérer des données dans cette table et dans des autres non malgré que j'utilise le même SGBD oracle9i
    avez vous une explication.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Le problème n'est pas très bien présenté.
    Sans plus d'info je dirais de vérifier les paramètres de session pour les différents clients (les postes):
    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
    21
    22
    23
    24
    25
    26
    27
    28
    SQL> select * from nls_session_parameters;
    
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,                                                                                                                                
    NLS_CALENDAR                   GREGORIAN                                                                                                                         
    NLS_DATE_FORMAT                DD-MON-RR                                                                                                                         
    NLS_DATE_LANGUAGE              AMERICAN                                                                                                                          
    NLS_SORT                       BINARY                                                                                                                            
    NLS_TIME_FORMAT                HH.MI.SSXFF AM                                                                                                                    
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM                                                                                                          
                                                                                                                                                                     
    PARAMETER                      VALUE                                                                                                                             
    ------------------------------ ----------------------------------------                                                                                          
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR                                                                                                                
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR                                                                                                      
    NLS_DUAL_CURRENCY              $                                                                                                                                 
    NLS_COMP                       BINARY                                                                                                                            
    NLS_LENGTH_SEMANTICS           BYTE                                                                                                                              
    NLS_NCHAR_CONV_EXCP            FALSE
    
    17 rows selected.
    
    SQL>
    et de s'assurer que dans le code il n'y a pas de conversion implicite

  3. #3
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse, j'ai déjà vérifier les paramètres
    J'ai le même paramétrage sur les deux machines
    Concernant la vérification de code, normalement s'il y a un problème au niveau code le système ne pourrait plus insérer des lignes sur les deux machines mais comme je disais sur l'une tous va bien et sur l'autre le système ne permet pas d'insérer la ligne

    [erreur]
    date format is too long for internal buffer


    NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    et je utilise la conversion suivante
    to_timestamp(to_char(sysdate, 'dd-mm-yyyy hh24:mi:ss.') ||
    to_char(to_number(to_char(systimestamp, 'FF')) +
    op.seq_time_unique.nextval),
    'dd-mm-yyyy hh24:mi:ss.FF')

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par adouani_enis Voir le message
    ...
    et je utilise la conversion suivante
    C’est quoi ce code ?

    [Edit]
    Edité message jugé insultant ! Désolé !
    [/Edit]

  5. #5
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    J’utilise cette conversion pour déterminer la date à insérer dans ma base
    seq_time_unique est une séquence

    la date à insérer est égale à
    select to_timestamp(to_char(sysdate,'dd-mm-yyyy hh24:mi:ss.')||to_char(to_number(to_char(systimestamp,'FF')) + op.seq_time_unique.nextval ) ,'dd-mm-yyyy hh24:mi:ss.FF' from dual;

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    La précision d'un timestamp va bien au delà de la seconde. A quoi sert votre séquence ? Comprenez-vous vraiment la signification de cette expression ?
    Pourquoi ne pas utiliser directement systimestamp ?

  7. #7
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    C'est facile. pour ne pas insérer deux ligne avec le même timestamp

  8. #8
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Et en utilisant tout simplement systimestamp à la place de votre expression vous pouvez me montrer un jeu d'essai qui arrive à insérer deux lignes avec le même timestamp ?

  9. #9
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    Nous avons eu ce problème lors de l'insertion d'un fichier dans la table.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 412
    Points : 807
    Points
    807
    Par défaut
    Moi je suis d'accord avec probleme, je l'ai eu pour des jobs en paralleles dans une table de log, en me basant que sur le timestamp c'etait dans le desordre. Mais j'ai ajoute une autre colonne avec une sequence, j'estime que c'est plus propre et qu'alterer le timestamp n'est pas vraiment malin.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    TMP@MINILHC >create table tmp (my_time timestamp unique);
     
    Table created.
     
    Elapsed: 00:00:00.58
    TMP@MINILHC >insert into tmp select current_timestamp from dual connect by level<1e6;
    insert into tmp select current_timestamp from dual connect by level<1e6
    *
    ERROR at line 1:
    ORA-00001: unique constraint (TMP.SYS_C0013456) violated
     
     
    Elapsed: 00:00:01.46
    TMP@MINILHC >select systimestamp from dual;
     
    SYSTIMESTAMP
    ---------------------------------------------------------------------------
    20-JUL-12 05.22.21.594000 PM +02:00
     
    Elapsed: 00:00:00.14
    TMP@MINILHC >insert into tmp select systimestamp from dual connect by level<1e6;
    insert into tmp select systimestamp from dual connect by level<1e6
    *
    ERROR at line 1:
    ORA-00001: unique constraint (TMP.SYS_C0013456) violated
     
     
    Elapsed: 00:00:00.04
    TMP@MINILHC >
    Et autant dire que passer a cote avec le nouveau hint ne fonctionne pas terrible

    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
    TMP@MINILHC >select index_name from user_indexes where table_name='TMP';
     
    INDEX_NAME
    ------------------------------
    SYS_C0013456
     
    Elapsed: 00:00:00.49
    TMP@MINILHC >insert /*+ ignore_row_on_dupkey_index(tmp,SYS_C0013456) */into tmp select systimestamp from dual connect by level<1e6;
    insert /*+ ignore_row_on_dupkey_index(tmp,SYS_C0013456) */into tmp select systimestamp from dual connect by level<1e6
    *
    ERROR at line 1:
    ORA-00600: internal error code, arguments: [qerltcInsertSelectRop_bad_state], [], [], [], [], [], [], [], [], [], [], []
     
     
    Elapsed: 00:00:07.72
    Prendre 7 secondes pour sortir une telle erreur.. Ou va la monde?

  11. #11
    Futur Membre du Club
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    14
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2010
    Messages : 14
    Points : 8
    Points
    8
    Par défaut
    premièrement merci pour ta réponse
    ignore_row_on_dupkey_index
    moi je faisais mon code avec oracle9i (c'est pas oarcle 11 ça?)
    j'ai pas bien compris ta solution.

Discussions similaires

  1. [9.1] Problème Timestamp non en UTC ?
    Par liofer dans le forum Requêtes
    Réponses: 0
    Dernier message: 10/02/2015, 17h39
  2. problème avec TIMESTAMP DEFAULT NULL
    Par Tchupacabra dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/06/2007, 16h18
  3. problème de timestamp dans champ MySQL
    Par Torpedox dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 04/12/2005, 09h59
  4. Problème de Timestamp
    Par om.rava dans le forum Outils
    Réponses: 1
    Dernier message: 03/10/2005, 18h35
  5. problème avec le type timestamp
    Par aline dans le forum Oracle
    Réponses: 6
    Dernier message: 21/02/2005, 10h05

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