sql >> Database >  >> RDS >> Mysql

SELECT resultatenset gebruiken om UPDATE-query uit te voeren met MySQL Stored Procedures

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 ;

NB:ik heb dit niet getest. Het is mogelijk dat MySQL UPDATE niet leuk vindt tegen een tabel waarvoor momenteel een cursor is geopend.

PS:heroverweeg hoe je wachtwoorden opslaat .

Re commentaar over RETURN vs. OUT vs. resultatenset:

RETURN wordt alleen gebruikt in opgeslagen functies, niet in opgeslagen procedures. Opgeslagen functies worden gebruikt wanneer u de routine binnen een andere SQL-expressie wilt aanroepen.

SELECT LCASE( checkUserFunc(?, ?) );

U kunt een OUT . gebruiken parameter, maar u moet eerst een gebruikersvariabele declareren om als parameter door te geven. En dan moet je die gebruikersvariabele selecteren om de waarde toch te krijgen.

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

Bij het retourneren van resultatensets van een opgeslagen procedure, is het het gemakkelijkst om een ​​SELECT . te gebruiken vraag.



  1. Alternatieven voor LIMIT en OFFSET voor paging in Oracle

  2. Hoe INTERSECT werkt in PostgreSQL

  3. Verschil tussen zwevend en decimaal gegevenstype

  4. Heeft de volgorde van velden in een WHERE-clausule invloed op de prestaties in MySQL?