Hauptmenü

Untermenü

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