[MySQL] Dynamische Cursor-Anweisung in Stored Procedure

  • SQL

    [MySQL] Dynamische Cursor-Anweisung in Stored Procedure

    Ich bin schon seit Stunden auf der Suche nach einer Möglichkeit, in einer Stored Procedure (bzw. Function) in MySQL eine dynamische Cursor-Anweisung zu erstellen. Nach meiner bisherigen Recherche ist das in MySQL (5) nicht möglich. Nun suche ich nach einer Alternative. Meine bisherigen Versuche sind leider gescheitert.

    Folgende Stored Function habe ich (Erklärung darunter):

    SQL-Abfrage

    1. /* Stored Procedure (bzw. Function), um die Seitenzahl zu ermitteln,
    2. auf welcher sich der Datensatz mit der ID X befindet */
    3. drop function if exists MELI_FILMLISTE_GET_PAGE;
    4. DELIMITER |
    5. create function MELI_FILMLISTE_GET_PAGE(pFILMLISTE_ID integer unsigned, pPerPage integer unsigned, pKundenID integer unsigned, pExtWhere varchar(255))
    6. returns integer unsigned
    7. begin
    8. declare finished int default 0;
    9. declare iC integer unsigned;
    10. declare rID integer unsigned;
    11. declare rPage integer unsigned;
    12. declare dummy varchar(255) CHARACTER SET utf8;
    13. declare SQLC cursor for select F.ID, MELI_GET_FILMNAME(F.ID) as TITEL
    14. from MELI_FILMLISTE F where KUNDEN_ID = pKundenID
    15. /*
    16. pExtWhere
    17. */
    18. order by F.FILM_NR desc, TITEL;
    19. declare CONTINUE HANDLER FOR SQLSTATE '02000' SET finished = 1;
    20. SET rPage = 1;
    21. SET iC = 0;
    22. OPEN SQLC;
    23. REPEAT
    24. SET iC = iC + 1;
    25. IF (iC = pPerPage + 1) THEN
    26. SET iC = 1;
    27. SET rPage = rPage + 1;
    28. END IF;
    29. FETCH SQLC INTO rID, dummy;
    30. IF (rID = pFILMLISTE_ID) THEN
    31. set finished = 1;
    32. END IF;
    33. UNTIL finished END REPEAT;
    34. CLOSE SQLC;
    35. return rPage;
    36. end|
    37. DELIMITER ;

    Letztendlich habe ich einfach eine SQL-Anweisung, die ich zeilenweise durchlaufe. Alles ab SET rPage = 1; (einschließlich) ist für mein aktuelles Problem eigentlich irrelevant. Ich benötige zum Durchlaufen (so weit ich weiß) einen Cursor. Ich las des öfteren von Views und temporären Tabellen, aber die sind leider alles andere als Multiuser-kompatibel. Das müssten die aber sein.

    Meiner Stored Function wird die Variable "pExtWhere" übergeben. Das ist ein String mit einer SQL-Anweisung, z. B. and (a = b). Diesen möchte ich eigentlich dynamisch in die SQL-Anweisung, die für den Cursor ist, einbauen. Das ist aber nicht möglich.

    Habt ihr eine Idee, wie ich das Problem lösen kann?

    Ich verwende MySQL in PHP, falls es da eine Umweglösung gibt.

    EDIT: Ich lege die SP nun dynamisch per PHP immer wieder neu an. Ist keine schöne Lösung, wie ich finde, aber tut im Moment das, was es soll. "Schönere" Lösungen sind jederzeit noch willkommen!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()