Bonjour,

Je fais habituellement un extraction SQL pour obtenir une liste exploitable à partir d'une application. Mais récemment l'application a modifié des données par défaut pour certains champs, faisant passer la valeur par défaut de '999' à ' '.

Voici mon ancien script d'extraction :
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
select 'M' || a.matric,b.etctit,b.etnomu,b.etpren,c.prufon,
a.prgrgrrm,e.libelle,c.PRNEFEX,g.liblong,c.PRAFEMP,h.liblong
 from chm_ppr a,pet b,chm_ppra c,chm_tli d,chm_tli e,chm_tli f,chm_tli g,chm_tli h
where a.nompop='AGJOUR'
  and c.nompop='AGJOUR'
  and b.codhop='010'
  and a.presmods in ('   ','GC ')
  and a.matric=b.matric
  and a.matric=c.matric
  and c.praftp='P'
  and c.prufon=d.valeur
  and d.rubcod='PAFUFON'
  and a.prgrgrrm=e.valeur
  and e.rubcod='PGRGRAD'
  and c.tufcres=f.valeur
  and f.rubcod='TUFCRES'
  and c.prnefex=g.valeur
  and g.rubcod='PAFEMPL'
  and c.prafemp=h.valeur
  and h.rubcod='PAFFONC'
order by b.etnomu,b.etpren,a.matric;
Les champs pour lesquels le paramètre par défaut est passé de '999' à ' ' sont les 2 champs en rouge.

Je dois donc modifier mon script pour prendre en compte les lignes comprenant ' ' comme valeur par défaut en plus de '999'. Mais le problème c'est que d'autres champs du script n'acceptent pas que ces champs soient ' ' car il n'y a pas de correspondance et pas moyen d'en rajouter avec cette valeur ' ' dans l'application.

Je voulais donc utiliser la fonction replace pour transformer (juste pour mon extraction) les valeurs ' ' pour ces 2 champs (prnefex et prafemp) en '999', l'ancienne valeur par défaut, reconnue par les autres champs. La fonction replace marche dans le select, mais elle ne marche pas en revanche en étant placée dans la cause where, aucune ligne n'est obtenue. Si j'enlève les replace du where, la liste obtenue ne prendra pas compte des lignes dont la valeur par défaut est ' '. Que faire ?

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
select 'M' || a.matric,b.etctit,b.etnomu,b.etpren,c.prufon,
a.prgrgrrm,e.libelle,replace(c.prnefex,' ',9),g.liblong,replace(c.prafemp,' ',9),h.liblong
 from chm_ppr a,pet b,chm_ppra c,chm_tli d,chm_tli e,chm_tli f,chm_tli g,chm_tli h 
where a.nompop='AGJOUR'
  and c.nompop='AGJOUR'
  and b.codhop='010'
  and a.presmods in ('   ','GC ')
  and a.matric=b.matric
  and a.matric=c.matric
  and c.praftp='P'
  and c.prufon=d.valeur
  and d.rubcod='PAFUFON'
  and a.prgrgrrm=e.valeur 
  and e.rubcod='PGRGRAD'
  and c.tufcres=f.valeur
  and f.rubcod='TUFCRES'
  and replace(c.prnefex,' ',9)=g.valeur
  and g.rubcod='PAFEMPL'
  and replace(c.prafemp,' ',9)=h.valeur
  and h.rubcod='PAFFONC'
order by b.etnomu,b.etpren,a.matric;
Merci de m'indiquer si vous avez une solution pour résoudre ce problème, car moi je sature, peut-être que je suis trop fatigué en ce vendredi.

Cordialement,

Seb