Mit einem Cursor kann man nacheinander durch die einzelnen Datensätze einer Abfrage gehen. Cursor gibt es in gespeicherten Prozeduren, und Triggern
Die Cursor in MySQL haben folgende Eigenschaften:
- schreibgeschützt: Ein Cursor ist nur zum lesen der Daten da
- nicht scrollbar: Man kann nur gerade durch alle Datensätze rotieren. Es gibt kein zurück oder überspringen o.ä.
- asensitiv: MySQL-Cursor arbeiten auf den tatsächlichen Daten oder auf einer Kopie. Die Entscheidung liegt beim Datenbankserver. Unter diesem Aspekt kann ein Cursor in MySQL entweder sensitive oder insensitive sein.
Sensitive Cursor: Greift ähnlich eines Pointers live auf die Daten zu, sie werden nicht zwischengespeichert, sondern direkt aus der Datenbank gelesen. Insensitive Cursor: Der Cursor ist schreibgeschützt und es wird eine temporäre Kopie der Daten erstellt. Asensitive Cursor: Ein asensitiver Cursor lässt der Datenbank die Entscheidung, ob der Cursor sensitive oder insensitive implementiert wird. Meistens wird er wie insensitive behandelt; es sei denn, die Engine kann sensitiv arbeiten.
Übersicht
DECLARE finished BOOLEAN DEFAULT FALSE;
DECLARE <cursor_name> CURSOR FOR <select_statement>;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
OPEN <cursor_name>;
loop_cursor:REPEAT
FETCH <cursor_name> INTO <variable1>[ ,...];
# Code
UNTIL finished END REPEAT loop_cursor;
CLOSE <cursor_name>;Deklarieren
DECLARE <cursor_name> CURSOR FOR <select_statement>;Öffnen
OPEN <cursor_name>;Verwenden
FETCH <cursor_name> INTO <variable1>[ ,...];Hier muss die Anzahl und Reihenfolge der Variablen zum Select Statement aus der Deklaration passen. Die Variablen müssen vorher deklariert sein.
Ende des Cursors erkennen
DECLARE finished BOOLEAN DEFAULT FALSE;
...
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;Schließen
CLOSE <cursor_name>;