Bonjour à toutes et à tous,

Je cherche un peu d'aide pour une requete récursive. Par facilité (pour vous et pour moi) je simplifierai l'exemple pour lequel je cherche de l'aide en espérant pouvoir l'adapter à ma situation réelle (infiniment plus complexe).

J'ai une table servant à établir la chaine connectique entre différents appareils (vous pouvez les voir simplement comme des modules avec une entrée et une sortie). Dans cette table je stocke simplement les ID des instruments en entrée et en sortie.

Pour tenter de rendre les choses plus claires j'ai quelque chose dans ce genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
table ais_connect
 
SENSOR_ID_IN   |   SENSOR_ID_OUT
------------------------------------
25      | 4
26      | 3
1000    | 25
1001    | 1000

Ce qui signifie en pratique que la sortie de l'instrument 4 est connectée à l'entrée de l'instrument 25 dont la sortie est reliée à l'entrée de l'intrument 1000 dont la sortie est reliée à l'entrée de l'instrument 1001.

Je cherche donc à faire une requete qui me liste l'ordre de la connectique sachant que je dois partir de l'instrument 4.

Pour l'instant j'ai tenté quelque chose comme ceci (qui risque de choquer les âmes sensibles mais qui ne tente rien n'a rien) :
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
    chain(out, in)
AS(
    SELECT sensor_id_out, sensor_id_in
    FROM ais_connect
    WHERE sensor_id_out=4
    UNION ALL
    SELECT sensor_id_out, sensor_id_in
    FROM ais_connect V
        INNER JOIN chain c
            ON c.out = V.in)
SELECT *
FROM chain
;
Mais je reçois un message d'erreur me disant que je ne peux aliaser chain( etc.

Pour info j'utilise une base oracle via sqlplus sous linux.

Qqun aurait-il de quoi me mettre sur la voie ?

D'avance, merci pour votre aide!