Ich frage mich, ob und wie man das Ergebnis (e) einer delete
-Anweisung durchlaufen kann.Wie Schleife über löschen
Die delete
Aussage in der Lage, Werte der gelöschten Datensatz zurückzukehren:
Firebird 2.5 Language Reference
DELETE FROM {target} [[AS] alias] [WHERE {search-conditions | CURRENT OF cursorname}] [PLAN plan_items] [ORDER BY sort_items] [ROWS <m> [TO <n>]] [RETURNING <returning_list> [INTO <variables>]] <m>, <n> ::= Any expression evaluating to an integer. <returning_list> ::= ret_value [, ret_value ...] <variables> ::= :varname [, :varname ...]
Aber die returning
Syntax, ein delete
mit mehr als einem Rekordergebnis gibt ich:
mehrere Zeilen in Singleton auswählen.
einer Blockanweisung wie solche
EXECUTE BLOCK
RETURNS (
ADSREF TYPE OF DMN_REFID)
AS
begin
for
delete from m_s_ad_memo
returning ADSREF into :adsref
do
suspend;
end
gibt folgende Fehlermeldung:
Ungültiger Token.
Dynamischer SQL-Fehler.
SQL-Fehlercode = -104.
Token unbekannt - Zeile 7, Spalte 5.
löschen.
Also, ist das überhaupt möglich?
Könnte es mit einem umgebenden for select ... do
-loop und einem Cursor funktionieren?
Wie würde ein solcher Ansatz aussehen?
Ich habe noch nicht mit Cursors gearbeitet.
Zwei Links zu Beispielen von „Arbeit mit Cursor“ sind bei https://stackoverflow.com/a/45373980/976391 - aber Cursor kann sehr langsam sein in FB3, in 3.01, 3.02, .... finden sich noch Performance-Bugs in ihnen. –