Ich versuche, in einer Stored Function in MySQL einen Cursor per "declare" mitten im Code zu deklarieren. Der Grund ist, dass ich den Wert eines Parameters (in der verwendeten Where-Bedingung) erst mitten im Code kenne. Leider müssen alle Declare-Anweisungen zu Beginn der Stored Function kommen und somit bekomme ich eine SQL-Fehlermeldung.
Hier mein Code:
Hier mein Code:
SQL-Abfrage
- /* Stored Procedure (bzw. Function), um den Titel des
- angegebenen Mediums zu ermitteln. Wenn verknüpft mit Film,
- dann wird MELI_GET_FILMNAME aufgerufen, ansonsten wird
- die Bezeichnung direkt ausgelesen. */
- drop function if exists MELI_GET_MEDIUM_NAME;
- DELIMITER |
- create function MELI_GET_MEDIUM_NAME(pMEDIUM_ID integer unsigned)
- returns varchar(255) CHARACTER SET utf8
- begin
- declare MEDIUM_NAME varchar(255) CHARACTER SET utf8;
- declare FILM_ID integer unsigned;
- declare SQLC1 cursor for select FILM_LISTE_ID from MELI_FILMLISTE_TO_MEDIENLISTE where MEDIENLISTE_ID = pMEDIUM_ID;
- OPEN SQLC1;
- FETCH SQLC1 INTO FILM_ID;
- IF (FILM_ID > 0) THEN
- declare SQLC2 cursor for select MELI_GET_FILMNAME(FILM_ID);
- ELSE
- declare SQLC2 cursor for select BEZEICHNUNG1 from MELI_MEDIENLISTE where ID = pMEDIUM_ID;
- END IF;
- CLOSE SQLC1;
- OPEN SQLC2;
- FETCH SQLC2 INTO MEDIUM_NAME;
- CLOSE SQLC2;
- return MEDIUM_NAME;
- end|
- DELIMITER ;
declare SQLC2
ist die kritische Stelle. Wie kann ich das anders lösen? Man müsste quasi die SQL-Anweisung oben mit einem Platzhalter deklarieren können und dann unten den Platzhalter durch einen Wert ersetzen.