Entwickler-Ecke
Datenbanken - Schleife in Stored Procedure
UGrohne - Mi 23.01.08 17:51
Titel: Schleife in Stored Procedure
Hallo,
ich brauche eine Stored Procedure, um eine Baumstruktur auszulesen. Dazu hab ich vor Jahren mal etwas in Firebird gemacht, das folgendermaßen aussah:
SQL-Anweisung
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| CREATE PROCEDURE ARTIKELTREE ( ROOT INTEGER, LVL INTEGER) RETURNS ( AID INTEGER, RLVL INTEGER) AS DECLARE VARIABLE SUB_AID INTEGER; begin SELECT aid from artikel WHERE aid=:ROOT INTO :aid;
IF (aid IS NOT NULL) THEN BEGIN RLVL=LVL; SUSPEND; FOR SELECT aid FROM artikel WHERE parent=:root ORDER BY aid INTO :sub_aid DO BEGIN FOR SELECT aid, rlvl FROM artikeltree(:sub_aid,:lvl+1) INTO :aid,:rlvl DO SUSPEND; END END END |
Und das brauche ich in etwa im SQL Server. Das größte Problem ist, dass ich keine Ahnung habe, wie ich in einer Schleife alle Elemente einer Abfrage durchgehend und etwas damit machen kann, so wie es in dieser FB-Prozedur der Fall ist (siehe hervorgehobene Stellen), also eine Art "For each".
Hat da jemand Ahnung von?
Moderiert von
matze: Code- durch SQL-Tags ersetzt
noidic - Do 24.01.08 09:12
Ich weiss nicht, wies in SQL-Server ist, aber vielleicht probierst du die Oracle-Syntax dafür mal:
SQL-Anweisung
1: 2: 3:
| for variable in (select ...) loop ... end loop; |
variable ist dann ein record mit allen Feldern der Tabelle.
Vielleicht gehts in SQL-Server ja ähnlich.
alzaimar - Do 24.01.08 10:20
Das macht man mit einem Cursor.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| declare cursor mycursor [local static forward_only] for select * from foobar open mycursor
fetch next from mycursor into @var1, @var2, @var2 while (@@fetch_status = 0) begin fetch next from mycursor into @var1, @var2, @var2 end
close mycursor deallocate mycursor |
Ich würd's nicht rekursiv machen. SQL2005 kann aber auch rekursive Queries. such mal danach, vor nem Jahr oder so hab ich bei SQLCentral einen Artikel darüber gelesen
UGrohne - Do 24.01.08 15:07
Und da hat sogar alzaimer was dazu geschrieben :)
Danke, das hilft uns auf jeden Fall weiter!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!