V. 8.7 (27.03.2012)

Infos

Download

Theorie Advanced MySQL

Beispiele

SQL-Dumps und Beispiele

Schnellsuche

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;

weiter zum nächsten Abschnitt