Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1351 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème Script sql developer Oracle

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème Script sql developer Oracle

n°2245601
adilson
Posté le 10-12-2014 à 12:40:38  profilanswer
 

Bonjour,  
 
Je suis assez débutant sur SQL Developper et j'aimerai avoir votre aide svp.
 
Dans une requête

Code :
  1. SELECT Donnée1, Donnée2, Donnée3, Donnée4, Donnée5, Donnée6, Donnée7, Donnée8, Donnée9, Donnée10, Donnée11, Donnée12, Donnée13, Donnée14, Donnée15, Donnée16, Donnée17, Donnée18
  2. from
  3. (
  4. select
  5. h.doccode as Donnée1,
  6. d.name as Donnée2,
  7. TRIM(h.docnum) as Donnée3,
  8. to_char (h.inpdate, 'YYYYMMDD') as Donnée4,
  9. l.el1 as Donnée5,
  10. cpt.name as Donnée6,
  11. l.el2 as Donnée7,
  12. aux.name as Donnée8,
  13. NVL (concat(h.doccode, h.docnum), l.ref1) as Donnée9, 
  14. to_char (h.docdate, 'YYYYMMDD') as Donnée10,
  15. replace(replace(h.descr,';','-'),'|','-') as Donnée11,
  16. ABS(l.valuehome) as Donnée12,
  17. decode(l.deb_cred_ind,160,'C','D') as Donnée13,
  18. pay.matchref as Donnée14,
  19. to_char (l.paydate, 'YYYYMMDD') as Donnée15,
  20. to_char (h.inpdate, 'YYYYMMDD') as Donnée16,
  21. ABS(l.valuedoc) as Donnée17,
  22. h.curdoc as Donnée18
  23. from Table1 h , Table2 l, Table3 d, Table4 cpt, Table5 aux, Table6 pay
  24. where h.cmpcode=l.cmpcode
  25. and h.cmpcode=d.cmpcode
  26. and h.cmpcode=cpt.cmpcode
  27. and h.cmpcode=aux.cmpcode
  28. and l.cmpcode=pay.cmpcode(+)
  29. and l.doccode=pay.doccode(+)
  30. and l.docnum=pay.docnum(+)
  31. and l.doclinenum=pay.doclinenum(+)
  32. and h.yr=2011
  33. and h.inpdate < '20/01/2011'
  34. and h.doccode=l.doccode
  35. and h.docnum=l.docnum
  36. and h.doccode=d.code
  37. and cpt.code=l.el1
  38. and cpt.elmlevel=1
  39. and aux.code=l.el2
  40. and aux.elmlevel=2
  41. order by inpdate);


 
Mon premier problème au niveau de cette ligne :

Code :
  1. NVL (concat(h.doccode, h.docnum), l.ref1) as Donnée9,


 
Je veux que : Si Donnée9 est vide, concaténer doccode et docnum.
 
Mais le problème c'est qu'il fait un concaténer pour toutes les colonnes Donnée9 même ceux qui présentent une valeur.
 
Mon second problème au niveau de cette ligne :

Code :
  1. ABS(l.valuedoc) as Donnée17,


 
Ce que je veux, c'est qu'il me prend la valeur absolue de Donnée17 avec les décimales.
 
Mais le problème c'est qu'il ne prend pas les décimales, mais que les entiers.
 
Pouvez-vous m'aider svp ?
 
Merci d'avance

mood
Publicité
Posté le 10-12-2014 à 12:40:38  profilanswer
 

n°2245602
deliriumtr​emens
sic transit intestinal...
Posté le 10-12-2014 à 12:59:02  profilanswer
 

Premier point
il n'est pas clair "si Donnée9 est vide" tu veux dire si l.ref1 est null, plutôt, non ?
 
Je ferais (utilisation de coalesce plutôt que NVL, qui est du pur Oracle).  
Mais je pense que ton problème vient seulement de l'ordre des paramètres de NVL.
 

Code :
  1. coalesce(l.ref1, concat(h.doccode, h.docnum)) as Donnée9


 
ou si ce n'est pas forcément null que tu veux remplacer, mais aussi un string avec uniquement des espaces
 

Code :
  1. case when l.ref1 is null or trim(l.ref1) = '' then concat(h.doccode, h.docnum) else l.ref1 end as Donnée9


 
 
Deuxième point
ABS ne supprime pas les décimales, donc ton problème doit venir d'ailleurs.
 
 
De manière générale
Les jointures avec les =xxx(+) sont franchement à oublier. C'est une vieillerie d'Oracle à éviter le plus possible.
 
Idem pour les autres jointures.
Il ne devrait y avoir qu'une table dans la clause FROM et des INNER JOIN, LEFT JOIN ou RIGHT JOIN pour les tables liées.


Message édité par deliriumtremens le 10-12-2014 à 13:00:09
n°2245613
adilson
Posté le 10-12-2014 à 14:53:57  profilanswer
 

Merci beaucoup c'est très gentil.
 
Premier Point
 
Désolé, j'ai mal expliqué. C'est effectivemment ce que je voulais dire.
 
La valeur de l.ref1 n'est pas forcément null, donc j'ai utilisé ton 2ème code  
 
[cpp]
case when l.ref1 is null or trim(l.ref1) = '' then concat(h.doccode, h.docnum) else l.ref1 end as Donnée9
[cpp]
 
Mais voila ce que j'ai eu comme message :
 

ORA-00923: mot-clé FROM absent à l'emplacement prévu
00923. 00000 -  "FROM keyword not found where expected"
*Cause:    
*Action:
Erreur à la ligne 14, colonne 13


 
Deuxieme point
 
Le probléme des décimales peut être dû à quoi à votre avis ? sachant que le type de la colonne est NUMBER  
 
D'avance merci,


Message édité par adilson le 10-12-2014 à 14:55:49
n°2245626
deliriumtr​emens
sic transit intestinal...
Posté le 10-12-2014 à 16:16:38  profilanswer
 

Point1  
il ne faut pas oublier la virgule à la fin de la ligne (après le as Donnée9 )
 
Point2
Dans ta base, tu as des décimales dans ce champ (si tu fais une requête simple sur la table) ?
Cette colonne est en NUMBER (tout court), pas de precision ou de scale spécifié ?

n°2245632
adilson
Posté le 10-12-2014 à 17:15:35  profilanswer
 

Oups, j'avais oublié la virgule.
 
Donc merci beaucoup ça marche pour le premier point.
 
Concernant le Point 2 : J'ai bien des décimales dans le champ, et la colonne est en NUMBER tout court !
 
et si je fais une requête simple sur cette table j'ai pas le résultat non plus. C'est bizzar !
 

n°2245750
adilson
Posté le 11-12-2014 à 14:51:55  profilanswer
 

Merci beaucoup pour ton aide deliriumtremens.


Message édité par adilson le 11-12-2014 à 14:52:11
n°2245754
deliriumtr​emens
sic transit intestinal...
Posté le 11-12-2014 à 15:05:14  profilanswer
 

Mais c'est volontiers... Tu as vaincu le mystère des décimales disparues ?

n°2245840
adilson
Posté le 12-12-2014 à 09:42:04  profilanswer
 

Oui je l'ai vaincu   :bounce:  
 
Par contre la c'est un autre souci que j'ai, je sais pas si tu pourrai m'aider  :)  
 
J'aimerai savoir comment forcer l'affichage des décimales quand le nombre est entier (Quand 5 m'afficher 5,00) sans utiliser TO_CHAR.
 
Puisque quand j'utilise TO_CHAR le format de mes données change en caractères alors que je les veux en format nombre.
 
Je te remercie d'avance pour ton retour.

n°2245850
deliriumtr​emens
sic transit intestinal...
Posté le 12-12-2014 à 10:41:33  profilanswer
 

Hmmm, pas moyen je crois.
 
Cela dit, l'affichage des décimales devrait se faire au "dernier moment"... ou au niveau applicatif.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Problème Script sql developer Oracle

 

Sujets relatifs
Probleme avec FMODex en C pour lecture de .wav/.mp3probleme sur une macro
Problème sur la table de hashageprobleme d'encodage utf8 avec notepad++
probleme avec la fin de la ligneGénéralisation de capteur sous Android : problème de listener
Problème avec style.visibilityProbleme affichage Nginx <-> PHP
Problème lien Access-MySQL 
Plus de sujets relatifs à : Problème Script sql developer Oracle


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR