Rekursiver Block

Themen rund um den praktischen Einsatz von Firebird. Fragen zu SQL, Performance, Datenbankstrukturen, etc.

Moderator: thorben.braun

Antworten
HABA
Beiträge: 1
Registriert: Di 19. Dez 2023, 12:19

Hallo,

gibt es eine Möglichkeit einen Block rekursiv aufzurufen?

Also z.B.

execute block ?NAME? (
INPUT int = ?
)
returns (
OUTPUT int;
)
as
begin
if (...) then begin
:INPUT = :INPUT+1;
execute block ?NAME?(:INPUT); # DER BLOCK WIEDER SELBST AUFRUFEN
end
else begin
...
end
end

gruß
haba
Benutzeravatar
martin.koeditz
Beiträge: 446
Registriert: Sa 31. Mär 2018, 14:35

Hallo haba,

nein. Rekursionen kannst du nutzen, wenn du aus deinem Block eine Prozedur erstellst. Dann würde das funktionieren.

Der Block selbst fasst ja nur eine Menge Anweisungen zusammen und führt diese aus, ist selbst aber nicht in der DB gespeichert. Eine Prozedur hingegen hat eine "Aufrufadresse", die rekursiv genutzt werden kann.

Gruß
Martin
Martin Köditz
it & synergy GmbH
Wordi
Beiträge: 1
Registriert: Do 28. Dez 2023, 16:59

Hallo Haba,

ja, es ist möglich, einen Block in sich selbst rekursiv aufzurufen. In deinem Beispiel scheint die Syntax an SQL oder einer ähnlichen Datenbankabfragesprache zu erinnern. Beachte jedoch, dass die genaue Syntax je nach der verwendeten Datenbank abweichen kann.

Hier ist eine angepasste Version deines Codes, der einen Block rekursiv aufruft:

sql
Copy code
execute block ?NAME? (
INPUT int = ?
)
returns (
OUTPUT int;
)
as
begin
if (...) then
begin
:INPUT = :INPUT + 1;
-- Hier wird der Block rekursiv aufgerufen
execute block ?NAME? (:INPUT) returns (OUTPUT int) as
begin
-- Weitere Logik für den rekursiven Aufruf
OUTPUT = :INPUT * 2; -- Beispielhaft, hier kannst du deine Logik einfügen
end;
end
else
begin
-- Weitere Logik für den Basisfall
OUTPUT = :INPUT;
end
end

Dies ist jedoch nur ein allgemeines Beispiel, da die genaue Syntax von der verwendeten Datenbank abhängt. Stelle sicher, dass du die Dokumentation deiner spezifischen Datenbank konsultierst, um die korrekte Syntax für rekursive Blockaufrufe zu finden.

Viel Erfolg! Wenn du weitere Hilfe benötigst oder weitere Informationen bereitstellen kannst, stehe ich zur Verfügung.
In meiner Tätigkeit als Freiberufler im Bereich Business-Analyse fungiere ich als Berater für diverse Unternehmen unterschiedlicher Branchen. Meine Expertise erstreckt sich über verschiedene Schwerpunkte, darunter Power BI, Python und VBA-Programmierung.
jhoehne
Beiträge: 40
Registriert: Di 11. Dez 2018, 09:19

Wordi hat geschrieben: Fr 29. Dez 2023, 10:35 Stelle sicher, dass du die Dokumentation deiner spezifischen Datenbank konsultierst, um die korrekte Syntax für rekursive Blockaufrufe zu finden.
...und das ist, was man bekommt, wenn man eine KI fragt.
--
Joachim
bfuerchau
Beiträge: 490
Registriert: Mo 7. Mai 2018, 18:09
Kontaktdaten:

Es hieß ja auch früher schon:
Frage jemanden, der sich damit auskennt.
Was man nicht gelernt hat, kann man auch nicht weitergeben.
Insofern hat die KI ja wieder recht: "Frage jemanden, der sich damit auskennt." :lol:
Antworten