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

Développement SQL Server Discussion :

adaptation d'une requete oracle (start with) a sql server (CTE)


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Par défaut adaptation d'une requete oracle (start with) a sql server (CTE)
    Bonjour a tous,

    Je viens vers vous car j'éprouve quelques difficultés à adapter ma requete Oracle sur SqlServer.

    La requête Oracle utilise des éléments spécifique à oracle comme :
    - Start with
    - connect by ... prior
    - sys_connect_by_path
    Et l'implémentation des CTE m'étant inconnue, je galère


    Voici ma requete oracle.
    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
     
    sr1 AS  
    (  
    	SELECT table1, table2, sql FROM matable  
    	UNION  
    	SELECT table2, table1, sql FROM matable  
    ),  
     
    sr2 AS  
    (  
    	SELECT level, table1, table2, ltrim(sys_connect_by_path(sql, ' AND '), ' AND ') AS chemin  
    	FROM sr1  
    	WHERE table2      = '"+tab2+"'   
    	START WITH table1 = '"+tab1+"'  
    	CONNECT BY NOCYCLE table1 = PRIOR table2  
    	ORDER BY level ASC  
    )  
     
    SELECT chemin  
    FROM sr2  
    WHERE rownum = 1

    Si quelqu'un a une idée ca serait super

    merci d'avance

    Ghosty

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    START WITH / CONNECT BY sont des atrocités spécifique à Oracle.
    La norme SQL c'est WITH... avec des CTE.
    Lisez mon article à ce sujet, sur les requêtes récursives :
    http://sqlpro.developpez.com/cours/s...te-recursives/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    START WITH / CONNECT BY sont des atrocités spécifique à Oracle
    Des atrocités qui ont résolu les problèmes hiérarchiques entre 1977 et l'arrivée de la norme en 1999 sur ce sujet.
    Vous pouvez à juste titre critiquer les dix ans qu'il aura fallu à l'éditeur pour implémenter les rCTE !

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Par défaut
    Je connais votre article et je m'en sert déjà comme base de travail.

    J'arrive déjà à avoir de la récursivité mais celle ci ne me permet pas de trouver le chemin désiré.
    (Pour plus d'information sur mon problème ce référé au sujet suivant ou waldar ma déjà aidé : http://www.developpez.net/forums/d10...cte-recursion/)

    voila ma requête pour le moment.

    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
    sr1(table1, table2, steps, chemin) AS ( 
    	(SELECT table1, table2, 0, CAST('GTETS >>' AS VARCHAR(MAX)) 
    	FROM matable 
    	WHERE table1 = 'GTETS' 
    	UNION 
    	SELECT table1, table2, 0, CAST('GTETS >>' AS VARCHAR(MAX)) 
    	FROM matable
    	WHERE table1 = 'GTETS') 
    	UNION ALL
    	SELECT depart.table1, depart.table2, fin.steps + 1, fin.chemin + ' -> ' + depart.table1 + '-' + depart.table2
    	FROM sr1 AS fin
    		INNER JOIN matable AS depart
    			ON depart.table1 = fin.table2 
    )
    SELECT * 
    FROM sr1
    ORDER BY steps DESC
    Normalement cette requête devrait me retourner tous les chemins au départ de GTETS (je rajouterais ensuite l'arrivée dans le dernier select) mais la requête ne me retourne pas tous les chemins

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    sr1(table1, table2, steps, chemin) 
    AS ( 
    	(SELECT table1, table2, 0, CAST('GTETS >>' AS VARCHAR(MAX)) 
    	FROM matable 
    	WHERE table1 = 'GTETS' 
    	UNION ALL
    	SELECT depart.table1, depart.table2, fin.steps + 1, fin.chemin + ' -> ' + depart.table1 + '-' + depart.table2
    	FROM sr1 AS fin
    		INNER JOIN matable AS depart
    			ON depart.table1 = fin.table2 
    )
    SELECT * 
    FROM sr1
    ORDER BY steps DESC
    Me parait plus clair....

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 82
    Par défaut
    Je vois que tu a supprimer le premier "union" seulement celui me permettait d'avoir tous mes chemins.

    Je m'explique, ma table de type (table1,table2,sql) contient mes relations entre les différentes tables. seulement table1 et table2 ne sont pas normalisées, du coup la table1 peut être table père puis table fille dans une autre relation.



    sinon au niveau des résultats les deux requêtes retournes les mêmes résultats, mais ma requête ne retourne toujours pas les bons chemins.

Discussions similaires

  1. Executer une requete Oracle
    Par soso26 dans le forum Développement de jobs
    Réponses: 19
    Dernier message: 24/05/2011, 16h12
  2. Réponses: 2
    Dernier message: 18/05/2011, 20h15
  3. [ASP]- envoyer un fichier a une requete oracle
    Par toxycyty dans le forum ASP
    Réponses: 5
    Dernier message: 24/06/2008, 19h35
  4. estimation de la fin d'une requete oracle
    Par Mehdilis dans le forum Oracle
    Réponses: 3
    Dernier message: 19/06/2007, 11h05
  5. transformation d'une requete oracle en mysql
    Par isa21493 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/03/2006, 16h00

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