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

SQL Oracle Discussion :

Passage Oracle vers mariaDB


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Passage Oracle vers mariaDB
    Bonjour à tous,

    Je vous sollicite car je souhaiterais passer une requête SQL au format Oracle vers le format MariaDB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT {persistableRow.*} from T_ROLE persistableRow, T_ROLE_CONTAINMENT jointRow 
    WHERE persistableRow.persistId = jointRow.CHILD_ID (+) 
    AND persistableRow.ISCONTAINER = 1 START WITH jointRow.PARENT_ID = 4 
    CONNECT BY jointRow.PARENT_ID = PRIOR CHILD_ID
    Je sais juste que le (+) est une jointure externe.
    et que le connect BY PRIOR doit être remplacé par une CTE.
    Pouvez vous m'aidez ? Merci

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Pour les jointures consultez la doc cela devrait être facile

    Pour le CTE juste un exemple pour l'instant:
    La requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select level niv, e.*
      from emp e
    Connect By Prior e.empno = e.mgr
      Start With e.mgr = 7839
    /
    réécrite avec CTE donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    With r_emp (niv, empno, ename, job, mgr, hiredate, sal, comm, deptno) As
    (Select 1 niv, empno, ename, job, mgr, hiredate, sal, comm, deptno
       From emp e
      Where e.mgr = 7839
      Union All 
      Select niv + 1, e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, e.deptno
        From emp e, r_emp r
       Where e.mgr = r.empno    
    ) 
     SEARCH DEPTH FIRST BY empno SET order1
    Select *
      From r_emp
    order by order1

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour cette réponse qui va m'aider. Pourriez vous commenter le passage Oracle MariaDB car j'ai beaucoup de mal à comprendre. Déjà comment lire la requête? Je ne suis pas habitué au requête d'un tel niveau de complexité. Je pense que je ne comprends pas la requête récursive with (mariaDB) et la requête connect by prior (Oracle)

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Ce n'est pas si compliqué si vous avez compris les CTE récursives et si vous analysez attentivement l'exemple:
    La partie d'ancrage pour la syntaxe spécifique Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Start With e.mgr = 7839
    donne la clause where de la partir d'ancrage de la syntaxe CTE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Where e.mgr = 7839
    La partie connexion hiérarchique pour la syntaxe spécifique Oracle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connect By Prior e.empno = e.mgr
    donne la jointure pour la partie récursive pour la syntaxe CTE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        From emp e, r_emp r
       Where e.mgr = r.empno
    signifie: à partir de l'enregistrement précèdent (prior) retient la valeur empno et cherchez les enregistrements pour lesquels la zone mgr porte la même valeur

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour cette réponse. J'ai bien compris pour la requête Oracle. Mais qu'en est-il pour la requête mariaDB. Je n'ai pas trop compris les CTE donc j'ai du mal à comprendre comment vous faite la transition ORacle MariaDB.

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Du coup, après avoir regardé cela, j'obtiens la requête suivante pour mon expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    WITH r_emp ({persistableRow.*}) AS
           (SELECT {persistableRow.*}
            FROM T_ROLE persistableRow, LEFT JOIN T_ROLE_CONTAINMENT jointRow
            WHERE persistableRow.persistId = jointRow.CHILD_ID AND persistableRow.ISCONTAINER = 1
            AND jointRow.PARENT_ID = 4
                    UNION ALL
    select {persistableRow.*}
    FROM jointRow
            where jointRow.PARENT_ID = CHILD_ID
    )
    select {persistableRow.*} from r_emp
    Cela te semble-t-il correct ? Sinon, peux-tu me corriger ?
    Merci d'avance

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Après correction, je penses que cette requête se rapproche plus du résultat voulu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     WITH recursive recursiverole AS
      (SELECT *
            FROM T_ROLE_CONTAINMENT jointRow
            WHERE jointRow.PARENT_ID = 4
    UNION ALL
    	select jointRow.*
    	FROM T_ROLE_CONTAINMENT jointRow, recursiverole
            where jointRow.PARENT_ID = recursiverole.CHILD_ID
    )
    select * from T_ROLE persistableRow left JOIN recursiverole 
    ON persistableRow.persistId = recursiverole.CHILD_ID
    WHERE persistableRow.ISCONTAINER = 1
    Cela vous semble t-il correct comparé à la requête SQL en oracle ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Personne pour répondre à ma question? Merci d'avance

Discussions similaires

  1. Réponses: 5
    Dernier message: 08/07/2005, 13h10
  2. Import oracle vers Interbase
    Par duran2004 dans le forum InterBase
    Réponses: 3
    Dernier message: 22/02/2005, 18h32
  3. Migration de données Oracle vers SQL server
    Par joul's dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 16/02/2005, 15h05
  4. Tranfert de données d'une base Oracle vers PostGre
    Par Elois dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/01/2004, 18h08

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