Advanced MySQL - Zwischenspeicherung - Routinen - Cursor
1. Definition
Hierbei handelt es sich um einen Zeiger auf eine SQL-Abfrage. Sollen also zum Beispiel mehrere Datensätze in einer Tabelle geändert werden, so läuft dieser Cursor Stück für Stück weiter. Ist im Moment ein wenig schwer zu verstehen, aber schaut euch mal die entsprechenden Beispielcodes an. Da werdet ihr fündig.
2. Initialisierung
Dazu bemüht man analog zu den Variablen innerhalb von Routinen das DECLARE
. Danach folgt der Name des Zeigers, gefolgt
von CURSOR
und FROM
. Zu guter Letzt kommt dann das eigentliche SQL-Statement.
DELIMITER $$
CREATE PROCEDURE doSomething (num)
BEGIN
DECLARE bla CURSOR FOR
SELECT
blubb
FROM
blubber
WHERE id = num
END$$
DELIMITER ;
Wichtig
Alle Variablen innerhalb von Routinen müssen vor(!) dem Cursor definiert werden. Sonst haut es euch einen Fehler um die Ohren.
3. Der Aufruf
... ist pillepus. Das geschieht einfach mit OPEN
.
DELIMITER $$
CREATE PROCEDURE doSomething (num)
BEGIN
DECLARE bla CURSOR FOR
SELECT ...
OPEN bla;
END$$
DELIMITER ;
4. Cursor beenden
Das muss man nicht machen, sollte es aber, um den Speicher dafür freizugeben. Das geschieht mit CLOSE
.
DELIMITER $$
CREATE PROCEDURE doSomething (num)
BEGIN
DECLARE bla CURSOR FOR
SELECT ...
OPEN bla;
...
CLOSE bla;
END$$
DELIMITER ;
5. In Variablen schreiben
Das läuft hier ein wenig anders ab. Anstelle von SELECT ... INTO
arbeitet man hier mit FETCH
.
DECLARE var VARCHAR(128);
DECLARE bla CURSOR FOR
SELECT
blubb
FROM
blubber
WHERE id = 2;
OPEN bla;
FETCH blubb INTO var;
CLOSE bla;
zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt