Bonjour,
Je cherche un équivalent du WITH ORACLE en SQL Server?
(WITH existe en SQL Server mais n'a pas du tout le même intérêt)
Version imprimable
Bonjour,
Je cherche un équivalent du WITH ORACLE en SQL Server?
(WITH existe en SQL Server mais n'a pas du tout le même intérêt)
que fait la fonction WITH sous Oracle? (je ne m'en rappel pas :aie:)
En gros cela revient à créer des tables temporaires... sauf qu'il ne pollue pas la session utilisateur avec des tables temporaires
Cela fait partie de la norme SQL:1999 et s'appelle la Common Table Expression (CTE). C'est parfaitement implémenté dans SQL Server depuis la version 2005, c'est à dire avant l'implémentation sous Oracle !!!
Lisez l'article que j'ai écrit à ce sujet :
http://sqlpro.developpez.com/cours/s...te-recursives/
A +
Merci beaucoup pour l'article!
En fait la syntaxe est légèrement différente mais le concept est le mm! voilà qui devrait grandement m'aider à optimiser bon nombre de requêtes!
:king:
9i tu es sûr ??? Parce que dans mes souvenirs ce n'étais même pas dans la v10g à sa sortie...
A +
ha ? :?
on ne parle peut-être pas de la même chose alors ?
http://download.oracle.com/docs/cd/B...9ir1.htm#70695
ou encore ceci :
http://www.oracle.com/technology/pro...ily/oct10.html
Ce WITH est effectivement une version incomplète ne gérant apparemment pas la récursivité. Or l'intérêt principal du WITH est d'introduire la récursivité des requête afin d'effectuer des parcours d'arbres et de graphes tel que la norme SQL l'a prévue. Or ce ne semble pas être du tout le cas de ce WITH d'Oracle dans la version que tu as mentionné !
Lisez l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/s...te-recursives/
A +
Je viens donc d'implémenter mon premier WITH
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 WITH doublon (num_voie, type_voie, adresse1, adresse2, cp, commune, nb) AS ( SELECT ca.num_voie,ca.type_voie,ca.adresse1, ca.adresse2,pcp.cp,pcp.commune, count(*) as nb FROM client_adresse ca LEFT OUTER JOIN param_code_postal pcp ON pcp.id_cp = ca.id_cp WHERE pcp.cp <> '00000' AND ca.id_type_adresse = 1 GROUP BY ca.num_voie,ca.type_voie,ca.adresse1, ca.adresse2,pcp.cp,pcp.commune HAVING count(*) > 1 --ORDER BY pcp.cp,pcp.commune,ca.type_voie,ca.adresse1, ca.adresse2 ) SELECT client.id_client FROM client INNER JOIN client_adresse ON client_adresse.id_client = client.id_client AND client_adresse.id_type_adresse = 1 INNER JOIN doublon ON client_adresse.num_voie = doublon.num_voie AND client_adresse.type_voie = doublon.type_voie AND client_adresse.adresse1 = doublon.adresse1 AND client_adresse.adresse2 = doublon.adresse2 AND client_adresse.cp = doublon.cp AND client_adresse.commune = doublon.commune
Mais j'ai l'erreur SQL suivante :
Msg*156, Niveau*15, État*1, Ligne*1
Syntaxe incorrecte vers le mot clé 'WITH'.
Et je ne voie vraiment pas pourquoi... une idée?
Mettez un point virgule sur la ligne qui précède le WITH.
A +