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 :

PB d'insertion de date


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut PB d'insertion de date
    Bonjour,

    Je vous écris car j'ai un problème dans l'insertion d'une date.

    Voici mon script de création de ma table

    /*==============================================================*/
    /* Table : PASSENGER */
    /*==============================================================*/
    create table PASSENGER (
    ID_PASSENGER INTEGER not null,
    ID_FLIGHT VARCHAR2(20) not null,
    ID_SEAT INTEGER not null,
    ID_GROUP INTEGER not null,
    CLASS VARCHAR2(1024) not null,
    CATEGORY VARCHAR2(30),
    VALIDITY SMALLINT not null,
    STATUS VARCHAR2(12) not null,
    FIRST_NAME_PASSENGER VARCHAR2(30) not null,
    LAST_NAME_PASSENGER VARCHAR2(30) not null,
    TEL VARCHAR2(30),
    ADDRESS VARCHAR2(30),
    ZIPCODE VARCHAR2(30),
    CITY VARCHAR2(30),
    PHOTOS VARCHAR2(30),
    BIRTH_DATE DATE,
    SEX VARCHAR2(30),
    EXPIRATION_DATE DATE,
    NATIONNALITY VARCHAR2(30),
    WITHDRAWAL SMALLINT,
    WITHDRAWAL_REASON VARCHAR2(30),
    constraint PK_PASSENGER primary key (ID_PASSENGER)
    );


    Bon jusq'ici tout va bien.

    Au début du script d'insertion, j'ai:

    ALTER SESSION SET NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi:ss';

    Puis ^pour insérer mes données j'ai cette ligne:

    insert into PASSENGER (ID_PASSENGER, ID_FLIGHT, ID_SEAT, ID_GROUP, CLASS, CATEGORY, VALIDITY, STATUS, FIRST_NAME_PASSENGER, LAST_NAME_PASSENGER, TEL, ADDRESS, ZIPCODE, CITY, PHOTOS, BIRTH_DATE, SEX, EXPIRATION_DATE, NATIONNALITY, WITHDRAWAL, WITHDRAWAL_REASON)
    values (4, '883Z', 4, 4, '1', 'VIP', 1, '1', 'Michel ', 'Drucker', '0687689045', '223 RUE DE LA SAUTERIE',
    '75016', 'Paris', 'Chemin','17.02.2007 09:29:17','M', '03.10.2009 04:40:16','French',1,'Perte du passeport');


    Et là oracle me dit:

    Le modèle du format de date se termine avant la conversion de la chaîne d'entrée entière

    Est ce que vous auriez une idée d'où peut provenir l'erreur?

  2. #2
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Le code mentionné fonctionne très bien sur ma 10.2 :
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SQL> create table PASSENGER (
      2  ID_PASSENGER INTEGER not null,
      3  ID_FLIGHT VARCHAR2(20) not null,
      4  ID_SEAT INTEGER not null,
      5  ID_GROUP INTEGER not null,
      6  CLASS VARCHAR2(1024) not null,
      7  CATEGORY VARCHAR2(30),
      8  VALIDITY SMALLINT not null,
      9  STATUS VARCHAR2(12) not null,
     10  FIRST_NAME_PASSENGER VARCHAR2(30) not null,
     11  LAST_NAME_PASSENGER VARCHAR2(30) not null,
     12  TEL VARCHAR2(30),
     13  ADDRESS VARCHAR2(30),
     14  ZIPCODE VARCHAR2(30),
     15  CITY VARCHAR2(30),
     16  PHOTOS VARCHAR2(30),
     17  BIRTH_DATE DATE,
     18  SEX VARCHAR2(30),
     19  EXPIRATION_DATE DATE,
     20  NATIONNALITY VARCHAR2(30),
     21  WITHDRAWAL SMALLINT,
     22  WITHDRAWAL_REASON VARCHAR2(30),
     23  constraint PK_PASSENGER primary key (ID_PASSENGER)
     24  );
     
    Table created.
     
    SQL> 
    SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'dd.mm.yyyy hh24:mi:ss';
     
    Session altered.
     
    SQL> 
    SQL> 
    SQL> insert into PASSENGER (ID_PASSENGER, ID_FLIGHT, ID_SEAT, ID_GROUP, CLASS, CATEGORY, VALIDITY, S
    TATUS, FIRST_NAME_PASSENGER, LAST_NAME_PASSENGER, TEL, ADDRESS, ZIPCODE, CITY, PHOTOS, BIRTH_DATE, S
    EX, EXPIRATION_DATE, NATIONNALITY, WITHDRAWAL, WITHDRAWAL_REASON)
      2  values (4, '883Z', 4, 4, '1', 'VIP', 1, '1', 'Michel ', 'Drucker', '0687689045', '223 RUE DE LA
     SAUTERIE',
      3  '75016', 'Paris', 'Chemin','17.02.2007 09:29:17','M', '03.10.2009 04:40:16','French',1,'Perte d
    u passeport');
     
    1 row created.
     
    SQL>
    Une remarque cependant, il est fortement recommandé d'utiliser le masque de date directement sur le champ date, et non à travers un alter session.

    Nicolas.

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par NGasparotto
    Une remarque cependant, il est fortement recommandé d'utiliser le masque de date directement sur le champ date, et non à travers un alter session.
    Ah ?? Recommandé par qui et pourquoi ?

  4. #4
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Citation Envoyé par Pomalaix
    Ah ?? Recommandé par qui et pourquoi ?
    Recommandé par le bon sens des règles de développement, et parce que si l'insert est fait sans qu'il y ait eu l'alter session (et donc que le format de date de la session ne correspond pas forcément à celui utilisé dans la requête), il y a le message d'erreur qu'a eu initialement dalton5 dans son post, à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> insert into PASSENGER (ID_PASSENGER, ID_FLIGHT, ID_SEAT, ID_GROUP, CLASS, CATEGORY, VALIDITY, STATUS, FIRST_NAME_PASSENGER, LAST_NAME_PASSENGER, TEL, ADDRESS, ZIPCODE, CITY, PHOTOS, BIRTH_DATE, SEX, EXPIRATION_DATE, NATIONNALITY, WITHDRAWAL, WITHDRAWAL_REASON)
      2  values (4, '883Z', 4, 4, '1', 'VIP', 1, '1', 'Michel ', 'Drucker', '0687689045', '223 RUE DE LA SAUTERIE',
      3  '75016', 'Paris', 'Chemin','17.02.2007 09:29:17','M', '03.10.2009 04:40:16','French',1,'Perte du passeport');
    '75016', 'Paris', 'Chemin','17.02.2007 09:29:17','M', '03.10.2009 04:40:16','French',1,'Perte du pas
                               *
    ERREUR à la ligne 3 :
    ORA-01830: Le modèle  du format de date se termine avant la conversion de la chaîne d'entrée entière
    
    SQL>
    Ce genre d'erreur est facilement évitable si le code contient le masque du format de date :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> insert into PASSENGER (ID_PASSENGER, ID_FLIGHT, ID_SEAT, ID_GROUP, CLASS, CATEGORY, VALIDITY, STATUS, FIRST_NAME_PASSENGER, LAST_NAME_PASSENGER, TEL, ADDRESS, ZIPCODE, CITY, PHOTOS, BIRTH_DATE, SEX, EXPIRATION_DATE, NATIONNALITY, WITHDRAWAL, WITHDRAWAL_REASON)
      2  values (4, '883Z', 4, 4, '1', 'VIP', 1, '1', 'Michel ', 'Drucker', '0687689045', '223 RUE DE LA SAUTERIE',
      3  '75016', 'Paris', 'Chemin',to_date('17.02.2007 09:29:17','dd.mm.yyyy hh24:mi:ss'),'M', to_date('03.10.2009 04:40:16','dd.mm.yyyy hh24:mi:ss'),'French',1,'Perte du passeport');
    
    1 ligne créée.
    
    SQL>
    Nicolas.

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 28
    Par défaut
    Merci à tous pour votre aide.

    Super cool se forum!!

    Bonne journée...

    Alex

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Citation Envoyé par NGasparotto
    Recommandé par le bon sens des règles de développement
    Répéter le même format en dur à chaque manipulation de date, c'est le contraire du bon sens !!!

    Après tout est une question de contexte :
    si on est certain que l'utilisateur n'a pas la main sur la variable NLS_DATE_FORMAT, on peut la définir en début de session via l'application, ou par un déclencheur ON LOGON.
    Si cette condition n'est pas certaine, utiliser une variable de format de date dédiée au sein de l'application me paraît être le minimum syndical.

  7. #7
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Citation Envoyé par Pomalaix
    Répéter le même format en dur à chaque manipulation de date, c'est le contraire du bon sens !!!

    Après tout est une question de contexte :
    si on est certain que l'utilisateur n'a pas la main sur la variable NLS_DATE_FORMAT, on peut la définir en début de session via l'application, ou par un déclencheur ON LOGON.
    Si cette condition n'est pas certaine, utiliser une variable de format de date dédiée au sein de l'application me paraît être le minimum syndical.
    Je ne vois pas ce qu'il y a de choquant, et de contraire au bon sens, de mettre le format de date embarquée dans la requête. Tu parles de mettre "en dur" le format de la date, mais il s'agit de la requête elle-même qu'il faut bien écrire à un moment donné en toute lettre. Ce n'est pas comme une valeur "en dur".
    Après tout, il faut bien s'assurer à un moment ou un autre de ce que l'on saisi. Et c'est le seul moyen d'être sur et de ne pas se poser de question.

    Nicolas.

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

Discussions similaires

  1. [MySQL] insertion de date
    Par santoya dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 18/10/2006, 11h57
  2. Insertion de date en oracle
    Par neutralino dans le forum Oracle
    Réponses: 2
    Dernier message: 21/06/2006, 10h58
  3. Insertion de date dans sql server
    Par 24 faubourg dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 16/12/2005, 12h21
  4. [JDBC][MS ACCESS] probleme insertion de date
    Par darius_the_first dans le forum JDBC
    Réponses: 2
    Dernier message: 10/12/2004, 18h04
  5. Insert Into + Date
    Par BoeufBrocoli dans le forum SQL
    Réponses: 10
    Dernier message: 13/08/2003, 11h23

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