Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/07/2008, 09h55   #1
Membre régulier
 
Inscription : mai 2005
Messages : 138
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 138
Points : 85
Points : 85
Par défaut Oracle 10g date et timestamp

Bonjour à tous,
je m'occupe de faire la migration d'une application Postgres sous Oracle. Dans Postgres il y avait des types "date" et "timestamp" tout comme dans Oracle.
Je suis sur une application Tomcat/Hibernate/Oracle 10g (avec ojdbc5).
Lorsque je fais des opérations sur les timestamp je n'ai aucun soucis. Par contre avec les dates j'ai systèmatiquement l'erreur :
ORA-01861: le littéral ne concorde pas avec le format chaîne de caractères

Cependant lorsque j'execute la requête générée par HQL directement sous sqlplus je n'ai aucun problème...Je précise que le but du jeu est que j'exécute mes requêtes toujours avec le même format de date et qu'il doit se débrouiller avec
Voici un exemple de requête :

Code :
SELECT antecedent.id AS id0_ WHERE antecedent0_.date_enregistrement<='2008-07-01 18:51:56'
Cela fait un moment que je cherche une solution sans succès, j'ai bien setté mes variables

Code :
nls_date_format                      string      YYYY-MM-DD HH24:MI:SS
Code :
nls_timestamp_format                 string      YYYY-MM-DD HH24:MI:SS.FF
La requête ci-dessus marche impéc en sqlplus si je l'execute sur un champ date ou timestamp; mais pas dans mon appli. Est-ce un problème du jdbc oracle ? y-a-t-il des paramètres à gérer ?

Merci beaucoup d'essayer de vous pencher sur mon problème.

p.s : je rajoute que lorsque je fais un
Code :
SELECT * FROM NLS_DATABASE_PARAMETERS;
j'ai dans NLS_DATE_FORMAT : DD-MON-RR ......je ne sais pas si c'est utile comme remarque mais je le précise.
pafi76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 12h29   #2
Membre régulier
 
Inscription : mai 2005
Messages : 138
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 138
Points : 85
Points : 85
réponse temporaire trouvée...apparament le jdbc ne récuperais pas la session...j'ai donc rajouté :

Code :
1
2
Session s = this.currentSession();
		s.createSQLQuery("alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'").executeUpdate();
c'est pas propre mais ca marche pour le moment...
pafi76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 14h07   #3
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Quand tu fais des requêtes avec des filtres sur les dates, il vaut toujours mieux forcer la conversion to_char(date) pour comparer des chaines de caractères, car le
Code :
antecedent0_.date_enregistrement<='2008-07-01 18:51:56'
peut planter selon la valeur des paramètres NLS côté client
Privilégie plutôt
Code :
to_char(antecedent0_.date_enregistrement,'YYYYMMDD HH:MI:SS'))<='2008-07-01 18:51:56'
ou
Code :
antecedent0_.date_enregistrement<=to_date('2008-07-01 18:51:56','YYYYMMDD HH:MI:SS')
qui est je pense plus performant car évite de convertir chaque ligne de la table
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h42.


 
 
 
 
Partenaires

Hébergement Web