Ich habe ein Problem mit einer rekursiven Abfrage in Oracle.SQL rekursive Abfrage (Oracle)
Ich bin derzeit in der Lage, das Ergebnis zu erhalten, indem CTE in SQL Server verwendet, aber ich muss den Code für Oracle anpassen.
Der Code Ich verwende ist
WITH n(portefeuille, client, level, opcvm, ca, iter) AS
(
SELECT
portefeuille, client, 0 as level, opcvm, ca,
CAST(',' + CAST(portefeuille AS varchar) + ',' AS varchar) AS iter
FROM
dbo.chiffres
WHERE
opcvm IS NULL
UNION ALL
SELECT
m.portefeuille, n.client, n.level+1, m.opcvm, m.ca + n.ca,
CAST(iter + CAST(m.portefeuille AS varchar) + ',' AS varchar) AS iter
FROM
dbo.chiffres AS m
INNER JOIN
n ON n.portefeuille = m.opcvm
)
SELECT DISTINCT
n.level, n.client, n.portefeuille, n.ca , n.opcvm, iter,
(SELECT COUNT(*)
FROM n T1
WHERE T1.iter LIKE '%,' + CAST(n.portefeuille AS varchar) + ',%') - 1 AS Subordinates
FROM
n, dbo.chiffres c
WHERE
((SELECT COUNT(*)
FROM n T1
WHERE T1.iter LIKE '%,' + CAST(n.portefeuille AS varchar) + ',%') - 1) = 0
ORDER BY
level
Ich denke, dass ich ‚verbinden, indem Sie‘ in Oracle verwenden, aber ich bin mir nicht sicher, wie es zu benutzen.
In der Tat, in meinem endgültigen Code, ich würde ein "Select ....." anstelle der Tabelle dbo.chiffres verwenden.
Das Ergebnis dieser "wählen ...." ist (just ein exemple)
Client | portefeuille | CA | OPCVM
31054 | 024 | 140 | NULL
104900 | 034 |200 | 024
31054 | 006 | 10 | NULL
Und das Endergebnis, das ich will
level | Client | portefeuille | CA | iter | subordinates
0 | 31054 | 034 | 340 | ,024,034, |0
1 | 31054 | 006 | 10 | ,006, |0
CTEs funktionieren in Oracle (es wird in der Dokumentation als Unterabfrage-Factoring-Klausel bezeichnet) - Sie sollten es relativ einfach portieren können. Benennen Sie "level" in "lvl" um - "level" ist ein Schlüsselwort, das in hierarchischen Abfragen verwendet wird und nicht als Alias verwendet werden kann. – MT0
Vielen Dank für Ihre Antwort. Ich denke, ich habe diese Lösung versucht, aber ich habe den Fehler 'SELECT Keyword fehlt'. In der Tat ist mein Problem ein wenig komplizierter, weil ich keine Tabelle dbo.chiffres habe, sondern stattdessen ein 'select ....'. Kann dies die Ursache des Problems sein? – Lamia
Ich habe meinem Beitrag einige Details hinzugefügt, um mehr über mein Problem zu erfahren. – Lamia