Mysql dynamisch zu erstellen query-string in einer gespeicherten Prozedur basiert auf Logik

Dem Ziel zu ändern, ein query-string in eine Mysql stored procedure basiert auf input-Variablen.

Etwas wie dieses:

CREATE DEFINER=`root`@`localhost` PROCEDURE `func`(type VARCHAR(15))
BEGIN
    SET @type = type;

    -- Check for the sort parameter
    if @type="asc" THEN
        SET @sort = " order by name asc";
    elseif @type="desc" THEN
        SET @sort = " order by name desc";
    else
        SET @sort ="";
    end if;

SELECT id, name from table @sort;

END    
  • Die Lösung ist die Verwendung von execute, und concat: CREATE DEFINER=root@localhost VERFAHREN test(Eingabe VARCHAR(15)) BEGIN SET @input = input; if @input="asc" dann LEGEN Sie @Art = "order by ActivityLogKey asc"; elseif @input = "desc" dann LEGEN Sie @Art = "order by ActivityLogKey desc"; else SET @Art =""; end if; SET @query = CONCAT('select * from activitylog ',@Art,"limit 0, 5'); PREPARE stmt VON @Abfrage; EXECUTE stmt; DEALLOCATE PREPARE stmt; END
  • Wenn dies die Lösung, warum Sie nicht hinzufügen, es als Antwort und es akzeptieren oder Bearbeiten Sie Ihre Frage mit.
  • Ohne 100 Ruf, ich muss warten 8 Stunden für die Beantwortung meiner eigenen Frage
  • Dann warten. Die Einschränkung war nicht aufgestellt, weil die devs wollen, dass Sie veröffentlichen Sie Ihre Antwort an der falschen Stelle; es wurde aufgestellt, weil Sie wollen, dass Sie, zu warten. Es gibt Gründe dafür.
  • Gute Beratung. Danke.
InformationsquelleAutor Ben Guthrie | 2011-12-18
Schreibe einen Kommentar