Bonjour, dans le cadre d'une migration, je dois modifier quelques requêtes écrites pour oracle afin qu'elle puisse être mangée par Postgre.

Au départ, j'ai :

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
22
23
24
25
26
27
28
29
30
31
32
create view TSTVIEW 
as 
select a.*,
       b.met_id,b.met_lib,
       h.fct_id,
       c.fct_lib,
       d.ct_id,d.ct_lib,j.ct_valide,
       e.typ_id,e.typ_lib,
       f.notfct_val,
       i.ser_lib  
from 
    collaborateurs a,
    metiers b,
    fonction c,
    competences_tech d,
    type_ct e,
    li_col_ct_fct f,
    li_col_met g,
    li_col_fct h,
    service i,
    LI_MET_TYP_CT j
where 
    (a.col_id=g.col_id(+) 
    and g.met_id=b.met_id(+)) 
    and (a.col_id=h.col_id(+) 
    and h.fct_id=c.fct_id(+)) 
    and (f.col_id=a.col_id and f.met_id=b.met_id and d.ct_id=f.ct_id) 
    and (j.typ_id=e.typ_id) 
    and (a.ser_id = i.ser_id(+)) 
    and (j.ct_id = d.ct_id)
    and (j.met_id = g.met_id)
order by a.col_nom asc , c.fct_lib asc , e.typ_lib asc , j.ct_valide desc, d.ct_lib asc;
En appliquant ce que j'ai compris de cet opérateur, j'ai transformé le code en


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
CREATE OR REPLACE VIEW tstview AS 
 SELECT a.col_id, a.col_matricule, a.col_nom, a.col_prenom, a.col_dt_entree, a.col_qual,
 a.col_formation, a.ser_id, a.ag_id, a.col_typeimport, a.col_dt_naiss, a.col_int_ext, a.col_sexe,
 a.col_nomabrege, a.col_diplome, a.col_pr_semicomplet,
 a.col_pr_complet, b.met_id, b.met_lib, h.fct_id, c.fct_lib, d.ct_id, d.ct_lib, j.ct_valide, e.typ_id, e.typ_lib, f.notfct_val, i.ser_lib
   FROM collaborateurs a
   LEFT JOIN li_col_met g ON a.col_id = g.col_id
   LEFT JOIN li_col_fct h ON a.col_id = h.col_id
   LEFT JOIN service i ON a.ser_id = i.ser_id, competences_tech d, type_ct e, li_col_ct_fct f, li_col_met
   LEFT JOIN metiers b ON li_col_met.met_id = b.met_id, li_col_fct
   LEFT JOIN fonction c ON li_col_fct.fct_id = c.fct_id, li_met_typ_ct j
  WHERE f.col_id = a.col_id AND f.met_id = b.met_id AND d.ct_id = f.ct_id AND j.typ_id = e.typ_id AND j.ct_id = d.ct_id AND j.met_id = g.met_id
  ORDER BY a.col_nom, c.fct_lib, e.typ_lib, j.ct_valide DESC, d.ct_lib;
 
ALTER TABLE tstview OWNER TO postgres;
La syntaxe est résultat de ce postgreSQL a retraité à partir de mon code modifié.

Je suppose que ma requête est sémantiquement différente de la première car sous oracle, j'ai qq chose et pas sous Postgre alors que j'ai les même données.

Des paires d'yeux averties verraient-elles quelque chose ?