Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird Cursor - Wozu ? Welche Vorteile ? (https://www.delphipraxis.net/206052-firebird-cursor-wozu-welche-vorteile.html)

lxo 13. Nov 2020 14:55

Datenbank: Firebird • Version: 3.0.7 • Zugriff über: -

Firebird Cursor - Wozu ? Welche Vorteile ?
 
Hallo,

ich bin über die Cursor gestoßen bei Firebird verstehe leider nur nicht ganz wo da der wirkliche Vorteil zu "for select" ist oder wann/wozu sollte man das genau verwenden?
Im Internet bin ich bisher leider nicht ganz schlau daraus geworden.
Könnte mir das vielleicht jemand erklären, wenn es geht mit Beispielen oder sinnvolle Anwendungsfälle dafür nennen?

https://firebirdsql.org/refdocs/lang...forselect.html
https://firebirdsql.org/refdocs/lang...declare-cursor

mkinzler 13. Nov 2020 15:09

AW: Firebird Cursor - Wozu ? Welche Vorteile ?
 
"Normale" For ...-Schleifen sind von der/den Quell-Tabellen(n) "entkoppelt".
Bei dieser Variante wird das Ergebnis mit einem Cursor verknüpft.
Änderungen an den abgefragten Daten werden direkt ausgeführt und ändert nicht nur die Ergebnismenge sondern auch die Quelldaten.

Vorteile: -schneller, da Änderungen sonst gesondert erfolgen müssen (gesonderte Abfragen; am Besten nach der Schleife).
- U.U. entfällt die Notwendigkeit von tem. Tabellen.

dataspider 14. Nov 2020 11:01

AW: Firebird Cursor - Wozu ? Welche Vorteile ?
 
Beispiel hier: as cursor clause

Wenn du z.B. in einer Procedure eine Tabelle dürchläufst, um bei bestimmten Datensätzen Änderungen durchzuführen oder zu löschen,
dann kann man sich eine DB-Abfrage sparen und ist deutlich scheller.

Also anstatt:
for select id from mytable into :id
delete from mytable where id = :id

lieber:
for select id from mytable as cursor mycursor
delete from mytable where current of mycursor


Frank

lxo 16. Nov 2020 09:02

AW: Firebird Cursor - Wozu ? Welche Vorteile ?
 
Zitat:

Zitat von dataspider (Beitrag 1477308)
Beispiel hier: as cursor clause

Wenn du z.B. in einer Procedure eine Tabelle dürchläufst, um bei bestimmten Datensätzen Änderungen durchzuführen oder zu löschen,
dann kann man sich eine DB-Abfrage sparen und ist deutlich scheller.

Also anstatt:
for select id from mytable into :id
delete from mytable where id = :id

lieber:
for select id from mytable as cursor mycursor
delete from mytable where current of mycursor


Frank

Ich glaub jetzt hat es langsam klick gemacht.
Danke euch für die Antworten.
Ich probiere mich da mal etwas aus.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz