Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1016 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°515817
fabriceMer​c
Posté le 16-09-2003 à 16:36:24  profilanswer
 

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
mood
Publicité
Posté le 16-09-2003 à 16:36:24  profilanswer
 

n°515836
vttman2
Je suis Open ...
Posté le 16-09-2003 à 16:54:57  profilanswer
 

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:  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

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

 

Sujets relatifs
requête dns dans un script[Oracle] çà existe un do/for ou un truc du genre ?
Exception definie par l utilisateur sous ORACLE (+Delphi) [RESOLU][PHP] Afficher le résultat d'une grosse requête ?
[PHP] Sauvegarder le résultat d'une requête dans un fichier excel ?Aide requete MySQL
[SQL Server] Récupérer le resultat d'une requête en pagesRequete malhonnete
DB2 : connaitre le temps d'execution d'une requete[db2] équivalent des séquences d'Oracle ?
Plus de sujets relatifs à : [SGBD][ORACLE] transformation d'une requete SQLserver en requeteORACLE


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR