1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Rekursive Auflösung mit connect by

Dieses Thema im Forum "Oracle" wurde erstellt von complain, 1 Dezember 2011.

  1. complain

    complain Neuer Benutzer

    Hallo.
    Kurze Vorstellung:
    Mein Name ist Georg, bin 24 und DBA sowie DB Anwendungsentwickler bei einem Transportunternehmen in Österreich.

    Bin gerade dabei mich mit Oracle vertraut zu machen da ich eig. aus der MSSQL Welt komme.

    Mein Problem derzeit erstreckt sich über hierachische Auflösung mittels connect by.
    In die Syntax habe ich mich schon eingelesen und ich bekomm auch schon eine Hierachische Abstufung zusammen.
    Leider nicht so wie ich es benötige:

    z.B. wird mir die komplette Hierachy in einzelne Zeilen dargestellt:

    /SL004​
    /SL004/KD000N​
    /SL004/KD000N/GB0002​
    /SL004/KD000N/GB0002/AB0002​

    Ich benötige aber nur die letzte Zeile:

    /SL004/KD000N/GB0002/AB0002​

    Und desweiteren wird mir der letzte Wert (Child) gar nicht mitausgegeben.
    Die Abfrage sieht momentan so aus:
    select sys_connect_by_path(MASTER_ID, '/')
    from meinetabelle
    connect by prior CHILD_ID = MASTER_ID
    start with MASTER_HIERACHY_LEVEL = 10

    Jemand ne Idee??

    Danke im Voraus,
    LGeorg
     
  2. ukulele

    ukulele Datenbank-Guru

    Leider kenne ich Oracle nicht, habe mich aber mal bei MSSQL mit Hirachie befasst. Dort gibt es einige neue Funktionen diesbezüglich, die aber in meinem Fall entweder schwer verständlich oder nicht hilfreich waren.

    Es gab aber in dem MSDN Artikel dazu ( http://msdn.microsoft.com/de-de/magazine/cc794278.aspx ) interessanten Code. Mit dem T-SQL Code zu Abbildung 5 habe ich mir dann eine Sicht gebaut aus der ich den Pfad auslese, k.a. ob dir das weiter hilft :-/
     
  3. complain

    complain Neuer Benutzer

    Danke für die rasche Antwort.

    In MSSQL hab ich die Hierachy schon zusammengebaut.
    Und ich hab mir halt in meiner Naivität gedacht, dass es auf Oracle wohl auch so gehen würde :D

    Leider war dem nicht so.
     
  4. ukulele

    ukulele Datenbank-Guru

    Dann weiss ich ja, wen ich fragen kann wenn mein Flickwerk mal den Geist aufgibt :) Aber ich fürchte bei Oracle spezifischen Problemen können dir nur wenig Leute hier helfen...
     
  5. complain

    complain Neuer Benutzer

    Gerne :) Bin zwar noch ein Greenhorn aber ich denk das vier Augen mehr sehen als zwei :D
     
  6. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    wenn ich dich richtig verstanden habe, sollte folgendes helfen. Ich kann es leider im moment nicht ausprobieren, da ich keinen DB-Zugriff habe.

    hier ein Beispiel aus der Oracle DOKU:

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------
    The following example returns the path of employee names from employee Kochhar to all employees of Kochhar (and their employees):
    SELECT LPAD(' ', 2*level-1)||SYS_CONNECT_BY_PATH(last_name, '/') "Path"
    FROM employees
    START WITH last_name = 'Kochhar'
    CONNECT BY PRIOR employee_id = manager_id;

    Path
    ---------------------------------------------------------------
    /Kochhar
    /Kochhar/Greenberg
    /Kochhar/Greenberg/Faviet
    /Kochhar/Greenberg/Chen
    /Kochhar/Greenberg/Sciarra
    /Kochhar/Greenberg/Urman
    /Kochhar/Greenberg/Popp
    /Kochhar/Whalen
    /Kochhar/Mavris
    /Kochhar/Baer
    /Kochhar/Higgins
    /Kochhar/Higgins/Gietz
    -------------------------------------------------------------------------------------------------------


    Dein Beispiel:


    select sys_connect_by_path(MASTER_ID, '/'), level as hierachieebene
    from meinetabelle
    connect by prior CHILD_ID = MASTER_ID
    start with MASTER_HIERACHY_LEVEL = 10


    Anschließend von diesem Stmt nur jene Einträge ermitteln, dessen "Hierachieebene" die größte Zahl besitzt.
     
  7. Distrilec

    Distrilec Datenbank-Guru

    Hi,

    probier mal:

    select sys_connect_by_path(MASTER_ID, '/')
    from meinetabelle
    where connect_by_isleaf = 1
    connect by prior CHILD_ID = MASTER_ID
    start with MASTER_HIERACHY_LEVEL = 10

    (Hab es nicht getestet, sollte aber funktionieren)
     
Die Seite wird geladen...
Ähnliche Themen
  1. Bernett22
    Antworten:
    1
    Aufrufe:
    934

Diese Seite empfehlen