|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 28 ![]() |
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? |
|
|
00
|
|
|
#2 | ||
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Le code mentionné fonctionne très bien sur ma 10.2 :
Code :
Nicolas. |
||
|
00
|
|
|
#3 | |
![]() Inscription : décembre 2002 Messages : 2 397 ![]() |
Citation:
|
|
|
|
00
|
|
|
#4 | |||||
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Citation:
Code :
Code :
|
|||||
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : février 2007 Messages : 28 ![]() |
Merci à tous pour votre aide.
Super cool se forum!! Bonne journée... Alex |
|
|
00
|
|
|
#6 | |
![]() Inscription : décembre 2002 Messages : 2 397 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#7 | |
|
Membre expérimenté
![]() ![]() Nicolas Gasparotto Inscription : janvier 2007 Messages : 424 ![]() |
Citation:
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. |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
je suis entierrement d'accord avec Nicolas, c'est une histoire de consistence de données. C'est quand meme plus sain quand la requête se suffit à elle même, plutot que ses valeurs dépendent de l'environnement. De toutes façons, le to_date est fait de manière implicite par oracle si on ne le met pas en dur... et la conversion implicite est une véritable calamité pour la stabilité d'un code
|
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Je pense que tout cela dépend de la façon dont le système supporte ou non les environnements nationaux (langue, format de date, de nombre, etc). Soit le système impose un fonctionnement statique qu'on ne peut pas modifier: dans ce cas, ALTER SESSION doit règler le problème et il est inutile de convertir explicitement les dates dans chaque requête. Soit le système est dynamique, les règles peuvent être changées au démarrage de la session, pour chaque client, voire en cours de session: dans ce cas, on ne peut pas prévoir quel sera le choix de la session et alors il faut convertir explicitement les dates dans chaque requête.
Citation:
Citation:
|
||
|
|
00
|
|
|
#10 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Je rejoins Nicolas et Rémi, il me semble plus propre de spécifier le to_date dans la requête d'insertion. De plus prendre cette habitude évite de faire des erreurs plus grosses comme des calculs sur des chaînes de caractères.
Pour ce qui est du besoin ou non de spécifier le format dans le to_date, je suis entièrement d'accord avec Pierre : tout dépend de l'environnement. Mais comme de nombreux développeurs ignorent souvent l'environnement dans lequel va être déployée leur appli, je suis néanmoins favorable de mettre le format dans le to_date.
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com