Frank (no reg): Stored procedures: Variablen im Cursor

Beitrag lesen

Hi!

Wenn ich richtig liege

  • du hast in deiner Tabelle mehrere Bäume
  • du willst die Baum-Wurzel für ein beliebiges Element in deinem
      Baum herausfinden?

Dennoch solltest du vielleicht an dieser Stelle keinen Cursor
verwenden sondern eine einfachere WHILE Schleife. Ein Cursor ist
einer dazu gedacht ein einmaliges Result Set zu erzeugen um es
dann Record für Record zu verarbeiten.

In deiner Schleife fragst du dann jeweils nach der ParentId

  
SELECT [ParentId] FROM [contract] WHERE [Id] = id  

Wenn dabei irgendwann NULL zurückgegeben wird, weil [ParentId] für
das Wurzelelement eben NULL sein muss, dann hast du den gewünschten
Datensatz.

  
DECLARE oldParentId int  
DECLARE newParentId int  
  
SELECT oldParentId = id   -- dein Funktions-Eingabe-Parameter  
  
WHILE 1 = 1 BEGIN  
  SELECT newParentId = [ParentId] FROM [contract] WHERE [Id] = oldParentId  
  IF newParent IS NULL  
    BREAK  
  ELSE  
    SELECT oldParentId = newParentId -- damit die Tabellenabfrage von oben auch wieder ne neue Id benutzt  
END  
  
RETURN oldParentId  

Da ich nicht viel mit MySQL arbeite kann ich auch nicht garantieren,
dass meine Syntax vollständig korrekt ist :) Konsultiere ggf dein
MySQL Manual.

Grüße,
Frank