sql >> Databáze >  >> RDS >> Mysql

Použití sady výsledků SELECT ke spuštění dotazu UPDATE s uloženými procedurami MySQL

DELIMITER //
CREATE PROCEDURE checkUser(IN in_email VARCHAR(80), IN in_password VARCHAR(50))
BEGIN
    DECLARE tempId INT DEFAULT 0;
    DECLARE tempName VARCHAR(50) DEFAULT NULL;
    DECLARE done INT DEFAULT 0;

    DECLARE cur CURSOR FOR 
        SELECT id, name FROM users WHERE email = in_email AND password = in_password;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    OPEN cur;

    REPEAT
        FETCH cur INTO tempId, tempName;
        UPDATE users SET online = 1 WHERE id = tempId;
    UNTIL done  = 1 END REPEAT;
    CLOSE cur;

    SELECT tempName;
END //
DELIMITER ;

Pozn.:Toto jsem netestoval. Je možné, že MySQL nemá rád UPDATE proti tabulce, pro kterou má aktuálně otevřený kurzor.

PS:Měli byste si rozmyslet jak ukládáte hesla .

Znovu okomentujte RETURN vs. OUT vs. sada výsledků:

RETURN se používá pouze v uložených funkcích, nikoli v uložených procedurách. Uložené funkce se používají, když chcete volat rutinu v rámci jiného výrazu SQL.

SELECT LCASE( checkUserFunc(?, ?) );

Můžete použít OUT parametr, ale musíte nejprve deklarovat uživatelskou proměnnou, která bude předána jako tento parametr. A pak musíte vybrat tuto uživatelskou proměnnou, abyste přesto získali její hodnotu.

SET @outparam = null;
CALL checkUser(?, ?, @outparam);
SELECT @outparam;

Při vracení sad výsledků z uložené procedury je nejjednodušší použít SELECT dotaz.



  1. Nelze vydat příkazy pro manipulaci s daty pomocí funkce executeQuery()

  2. Manipulujte s řádky pomocí více klauzulí v mysql

  3. Chyba při pokusu o aktualizaci rozvrhu v jarním spouštění

  4. Potřebuji nakonfigurovat django a mysql v pycharm IDE