MYSQL: Probleme beim Cursor initalisieren

olqs

Erfahrenes Mitglied
MYSQL: Probleme mit Stored Procedure

Hallo,

ich probier mich grad an meiner ersten Stored Procedure mit nem Cursor.
Ich will dynamisch einen sql Query zusammenbauen.
Diese läuft aber beim DECLARE cur1 ... Statement auf einen Fehler:
Code:
DELIMITER //

CREATE PROCEDURE kreuztabelle()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE sql_string varchar(8000);
  DECLARE propertyname varchar(50);
  SET sql_string = 'SELECT users.username';
  DECLARE cur1 CURSOR FOR SELECT DISTINCT property FROM system.allowed_user_properties WHERE property IS NOT NULL;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  OPEN cur1;

REPEAT
  FETCH cur1 INTO propertyname;

  IF NOT done THEN

    set propertyname = replace(propertyname, '''', '''''');


    SET sql_string = sql_string + ',
    '
        + 'MAX(CASE WHEN property = '''
        + propertyname
        + ''' THEN ''value'' ELSE '''' END) AS '''
        + propertyname
        + '''';

  END IF;

UNTIL done END REPEAT;

CLOSE cur1

SET sql_string = sql_string + '
from users
left join user_properties on users.id = user_properties.user_id
left join allowed_user_properties on allowed_user_properties.id = user_properties.property_id
where user_properties.property_id != 5
group by username';


select sql_string;
END;
//

DELIMITER ;

Fehlermeldung:
Code:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE cur1 CURSOR FOR SELECT DISTINCT property FROM system.allowed_user_proper' at line 7

Wenn ich die Zeile
Code:
SET sql_string = 'SELECT users.username';
auskommentiere, dann wird die Fehlermeldung erst bei
Code:
SET sql_string = sql_string + ',
    '
ausgegeben.
Also liegts denk ich nicht an dem Cursor wie zuerst vermutet, sondern an der varchar Variablen.

Gruss
Alex
 
Zuletzt bearbeitet:
OK hab den Fehler nun gefunden :)

Die Declare Statements müssen ganz am anfang sein. Wenn einmal ein SET Statement drin ist, kann kein DECLARE mehr folgen.
 

Neue Beiträge

Zurück