|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Je suis en 8.1.7.4. J'ai une requete
Code :
Je ne sais pas si cela a un rapport mais comme je suis dans le flou J'ai arrété l'instance. Changé le CHARACTERE SET de US7ASCII vers WE8ISO8859P1. J'ai aussi modifié les paramtres d'instance Code :
Si je retire cette partie de la requete ca fonctionne. Une dernière info date_ent est une date stocké dans un NUMBER(8) Si vous avez des idées.... |
||||
|
|
00
|
|
|
#2 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
|
|
|
|
00
|
|
|
#3 | ||||
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Code :
Je ne pense pas cela soit un problème de valeur puisque Code :
|
||||
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Peut etre y a-t-il un problème de conversion implicite le TRUNC pouvant être appliqué à un nombre et à une date...
Essaye de faire plutot TRUNC(date_ent/10000 , 0) pour voir... |
|
|
00
|
|
|
#5 | ||||
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Merci,
C'est un site distant, je ne peux pas tester tout de suite. Je le ferais demain en attendant je ne comprends pas parce que TRUNC (date_ent / 10000) est ecrit de manière identique entre le SELECT et le GROUP BY. Si il y a des conversions implicites elles devraient etre identiques. Non ? Et aussi pcq j'ai testé la requete Code :
Code :
|
||||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Je pensais que peut etre oracle pouvait tomber sur un null en début de select qui lui faisait basculer la fonction TRUNC en mode "DATE"... mais ton dernier exemple me rend pessimiste sur cette hypothèse...
Par contre, je crois que tu peux contourner le problème en faisant autrement. Remplace "TRUNC (date_ent / 10000)" par "TRUNC (date_ent, -4) /10000" dans ton select, et il me semble que tu pourras faire à ce moment là un group by "TRUNC (date_ent, -4) " simplement. |
|
|
00
|
|
|
#7 |
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
J'ai finalement pas resisté a tester tout de suite tes propositions et..... non. Ni l'une ni l'autre ne passe J'ai fais en plus le test avec TRUNC(date_env) qui lui passe mais bien sur ne fait pas ce que je veux fonctionnellement ! ! ! Encore merci de votre aide |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Et en faisant simplement un TRUNC (date_ent, -4) juste pour tester ?
Sinon tu peux tenter de faire très laid en passant par un substr : substr (date_ent,1,length(date_ent) - 4) (j'ai limite honte de proposer des solution pareilles... )
|
|
|
00
|
|
|
#9 |
![]() Salim Développeur et DBA Oracle Inscription : octobre 2006 Messages : 872 ![]() |
salut !
La requete est correcte, essaie le code ci-dessous dans toad, il va donner le resultat que tu souhaites: SELECT TRUNC(:dt_ent/10000 ) ANNEE, LPAD(TO_CHAR(COUNT (*) , '9G999G999G999'),15) NB_TRUC FROM dual GROUP BY TRUNC(:dt_ent /10000) HAVING COUNT (*) > 0 ORDER BY TRUNC(:dt_ent/10000 ) |
|
|
00
|
|
|
#10 |
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
remi4444 J'ai essayé toutes tes idées et cela ne marche pas.... Dommage. J'ai toujours ce message idiot ! !
salim11 Oui ton test avec DUAL fonctionne mais par contre cela ne donne pas du tout le résultat que je souhaite. Puisque je n'ai plus les information s de ma table. Bon, je crois que si je trouves un peut de temps je vais poster ça au support Oracle mais comme c'est une 8.1.7.4 il ne sont pas toujours très réactif |
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
tu devrais essayer de mettre le paramètre cursor_sharing à EXACT, on sais jamais qu'oracle se mette la zone tout seul en réécrivant la requête...
|
|
|
00
|
|
|
#12 | ||
|
Membre du Club
![]() Intégrateur Inscription : novembre 2004 Messages : 114 ![]() |
Bonjour,
A la lecture de vos tests, une idée me vient pour éviter la division dans le ORDER BY... As-tu essayer cette syntaxe ? (Désolé je n'ai pas pris le temps de tester : je n'ai qu'une base 9i sous la main) Code :
|
||
|
|
00
|
|
|
#13 | |
|
Membre éclairé
![]() Inscription : avril 2006 Messages : 465 ![]() |
Désolé c'est un site distant, je n'ai pas pu retester avant....
Citation:
Je ne comprends toujours pas pourquoi puisque cette requete fonctionnait avant et qu'elle fonctionne toujours sur d'autres bases avec la division. Mais c'est bien ca la solution : Remplacer le par Il faut quand meme avouer que le message d'erreur n'est pas tres explicite. En tout cas un grand à tous
|
|
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Intégrateur Inscription : novembre 2004 Messages : 114 ![]() |
Toujours heureux de donner un coup de main à la communauté (qui me le rend bien d'ailleurs
J'ai simplement triché avec le bug. Cette syntaxe a l'avantage de s'assurer que le ORDER BY sera basé sur les valeurs restituées dans le SELECT sans expliciter la formule éventuelle (Elle est aussi faite pour les faineants Attention, un tel ORDER BY est souvent plus couteux : Un ORDER BY sur une formule exploitant une colonne indexée ne sera pas aussi rapide que l'ORDER BY sur la colonne uniquement... Il faut préférer la 2ème solution... Surtout, si cela donne le même résultat !!! en terme de résultat d'ordonnancement (j'entends...)Je parle de bug car je suis entièrement d'accord : la situation n'est pas normale. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com