[SGBD][ORACLE] transformation d'une requete SQLserver en requeteORACLE

transformation d'une requete SQLserver en requeteORACLE [SGBD][ORACLE] - SQL/NoSQL - Programmation

Marsh Posté le 16-09-2003 à 16:36:24    

bonjour;
 
je n'ai jamais travaillé avec oracle et je manque cruellement de documentation donc si qqun pouvait me fournir des liens ca serait sympa.
Mon problème est le suivant je dois faire fonctionner ma requete SQL server sous oracle :
 
SELECT famille.id idfamille, famille.code codefamille, famille.des desfamille, famille.com comfamille,  
metier.id idmetier, metier.code codemetier, metier.des desmetier, metier.com commetier, emploi.id idemploi,  
emploi.code codeemploi, emploi.des desemploi, emploi.com comemploi, poste.id idposte, poste.code codeposte,  
poste.des desposte, poste.com composte ,tmp.effectif effectifPoste,tmp2.effectif effectifEmploi  
FROM dtable famille  
LEFT OUTER JOIN dtable metier ON famille.id = metier.lien  
LEFT OUTER JOIN dtable emploi ON metier.id = emploi.lien  
LEFT OUTER JOIN dtable poste ON emploi.id = poste.lien  
 
LEFT OUTER JOIN (  
 SELECT emploi.id emploiid, count(*) effectif  
 FROM dtable famille, dtable metier, dtable emploi, pers_v volet_personne  
 WHERE famille.nom_table = 'NOMGPE0'  
 AND famille.id = metier.lien  
 AND metier.id = emploi.lien  
 AND emploi.id = volet_personne.id_table  
 AND famille.des like 'i%' GROUP BY emploi.id) tmp2  
ON tmp2.emploiid = emploi.id  
 
LEFT OUTER JOIN ( SELECT poste.id posteid, count(*) effectif  
 FROM dtable famille, dtable metier, dtable emploi, dtable poste, pers_v volet_personne  
 WHERE famille.nom_table = 'NOMGPE0' AND famille.id = metier.lien  
 AND metier.id = emploi.lien AND emploi.id = poste.lien  
 AND poste.id = volet_personne.id_table  
 AND famille.des like 'i%' GROUP BY  poste.id ) tmp  
ON tmp.posteid = poste.id  
 
WHERE famille.nom_table = 'NOMGPE0'  
AND famille.des like 'i%'  
ORDER BY famille.des, metier.des, emploi.des, poste.des
 
 
j'ai alors réalisé celle ci:
 
SELECT famille.id idfamille, famille.code codefamille, famille.des desfamille, famille.com comfamille,  
metier.id idmetier, metier.code codemetier, metier.des desmetier, metier.com commetier, emploi.id idemploi,  
emploi.code codeemploi, emploi.des desemploi, emploi.com comemploi, poste.id idposte, poste.code codeposte,  
poste.des desposte, poste.com composte ,tmp.effectif effectifPoste,tmp2.effectif effectifEmploi  
 
FROM dtable famille,dtable metier,dtable emploi,dtable poste,
( SELECT emploi.id emploiid, count(*) effectif  
 FROM dtable famille, dtable metier, dtable emploi, pers_v volet_personne  
 WHERE famille.nom_table = 'NOMGPE0'  
 AND famille.id = metier.lien  
 AND metier.id = emploi.lien  
 AND emploi.id = volet_personne.id_table  
 AND famille.des like 'i%' GROUP BY emploi.id) tmp2,
 
(  SELECT poste.id posteid, count(*) effectif  
 FROM dtable famille, dtable metier, dtable emploi, dtable poste, pers_v volet_personne  
 WHERE famille.nom_table = 'NOMGPE0' AND famille.id = metier.lien  
 AND metier.id = emploi.lien AND emploi.id = poste.lien  
 AND poste.id = volet_personne.id_table  
 AND famille.des like 'i%' GROUP BY  poste.id ) tmp  
 
WHERE famille.id = metier.lien (+)
AND metier.id = emploi.lien (+)
AND emploi.id = poste.lien (+)
AND tmp2.emploiid = emploi.id (+)
AND tmp.posteid = poste.id (+)
AND famille.nom_table = 'NOMGPE0'  
AND famille.des like 'i%'  
ORDER BY famille.des, metier.des, emploi.des, poste.des
 
 
mais elle est fausse. (
 
 
merci d'avance


---------------
L'été il fait bo
Reply

Marsh Posté le 16-09-2003 à 16:36:24   

Reply

Marsh Posté le 16-09-2003 à 16:54:57    

essaye ça ...
 
Bon niveau du placement du (+)  
j'espère pas m'être gouré !
Sinon t'inverse tout  :lol:  
 
create view tmp2
as
 SELECT emploi.id emploiid, count(*) effectif  
 FROM dtable famille, dtable metier, dtable emploi, pers_v volet_personne  
 WHERE famille.nom_table = 'NOMGPE0'  
 AND famille.id = metier.lien  
 AND metier.id = emploi.lien  
 AND emploi.id = volet_personne.id_table  
 AND famille.des like 'i%' GROUP BY emploi.id
 
create view tmp
as
SELECT poste.id posteid, count(*) effectif  
 FROM dtable famille, dtable metier, dtable emploi, dtable poste, pers_v volet_personne  
 WHERE famille.nom_table = 'NOMGPE0' AND famille.id = metier.lien  
 AND metier.id = emploi.lien AND emploi.id = poste.lien  
 AND poste.id = volet_personne.id_table  
 AND famille.des like 'i%' GROUP BY  poste.id  
 
SELECT famille.id idfamille, famille.code codefamille, famille.des desfamille, famille.com comfamille,  
metier.id idmetier, metier.code codemetier, metier.des desmetier, metier.com commetier, emploi.id idemploi,  
emploi.code codeemploi, emploi.des desemploi, emploi.com comemploi, poste.id idposte, poste.code codeposte,  
poste.des desposte, poste.com composte ,tmp.effectif effectifPoste,tmp2.effectif effectifEmploi  
FROM  
dtable famille,  
dtable metier,  
dtable emploi,    
dtable poste,  
tmp2 ,  
tmp  
WHERE famille.nom_table = 'NOMGPE0'  and
famille.id = metier.lien (+)  and
metier.id = emploi.lien (+) and
emploi.id = poste.lien (+)  and
tmp2.emploiid (+) = emploi.id  and
tmp.posteid (+)= poste.id  and
famille.des like 'i%'  
ORDER BY famille.des, metier.des, emploi.des, poste.des
 
 
sachant que
http://tcosnuau.free.fr/COURS/SQL/SQL_ORA.HTM
 
je cite  
Jointure externe
Lorsqu'une ligne d'une table figurant dans une jointure n'a pas de correspondant dans les autres tables, elle ne satisfait pas au critère d'équi-jointure et donc ne figure pas dans le résultat de la jointure.  
Une option permet de faire figurer dans le résultat les lignes satisfaisant la condition d'équi-jointure plus celles n'ayant pas de correspondant. Cette option s'obtient en accolant (+) au nom de colonne de la table dans laquelle manquent des éléments, dans la condition d'équi-jointure.  
 
Exemple : Le département 40 ne figurait pas dans le résultat du SELECT précédent. Par contre, il figurera dans le résultat du SELECT suivant.  
 
SELECT emp.nom, lieuFROM emp, deptWHERE emp.n_dept(+) = dept.n_dept;
 
Le (+) peut s'interpréter comme l'ajout d'une ligne fictive dont toutes les colonnes ont la valeur NULL, et qui réalise la correspondance avec les lignes de l'autre table qui n'ont pas de correspondant réel. Dans l'exemple ci-dessus, la valeur de nom associée au département 40 est la valeur NULL.

 
Si t'as des soucis en Oracle va faire un tour sous
http://www.developpez.net/forums/
et pose tes questions ... :hello:  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed