IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

Problème de traduction de SQL Oracle vers PostgreSQL


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 61
    Points : 71
    Points
    71
    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 : 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 ?

  2. #2
    Membre averti
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Septembre 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2003
    Messages : 302
    Points : 331
    Points
    331
    Par défaut
    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 :

    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

Discussions similaires

  1. Réponses: 7
    Dernier message: 23/06/2014, 17h16
  2. problème d'une requete SQl java vers oracle
    Par bingo06260 dans le forum JDBC
    Réponses: 4
    Dernier message: 21/06/2011, 08h58
  3. SQL SERVER vers PostgreSQL
    Par mamiberkof dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/11/2007, 18h38
  4. Traduction de code Oracle vers SQL Server
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/11/2005, 23h43
  5. Traduction du code oracle vers SQL - suite
    Par randomcl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/11/2005, 14h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo