Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 25/04/2006, 15h06   #1
Candidat au titre de Membre du Club
 
Inscription : septembre 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 47
Points : 14
Points : 14
Par défaut Problème de traduction de SQL Oracle vers PostgreSQL

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 :
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 :
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 ?
Montaigne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 11h15   #2
Membre confirmé
 
Inscription : septembre 2003
Messages : 302
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : septembre 2003
Messages : 302
Points : 251
Points : 251
j'essaye juste de comprendre ta requete car je ne connais pas la syntaxe oracle donc je ne peux pas comparer mais ce qui me choque dans ta requete postgresql c'est ceci :

Citation:
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
Serait-il possible que tu mettes le schéma de ta base et que tu expliques ce que ta requete doit faire : ça serait peut être plus simple
__________________
L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent
Pierre Desproges
papy_tergnier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h34.


 
 
 
 
Partenaires

Hébergement Web