sql >> Database teknologi >  >> RDS >> Mysql

Brug af SELECT-resultatsæt til at køre UPDATE-forespørgsel med 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:Jeg har ikke testet dette. Det er muligt, at MySQL ikke kan lide UPDATE mod en tabel, som den i øjeblikket har en markør åben for.

PS:Du bør genoverveje hvordan du gemmer adgangskoder .

Rekommentar om RETURN vs. OUT vs. resultatsæt:

RETURN bruges kun i lagrede funktioner, ikke lagrede procedurer. Lagrede funktioner bruges, når du vil kalde rutinen i et andet SQL-udtryk.

SELECT LCASE( checkUserFunc(?, ?) );

Du kan bruge en OUT parameter, men du skal først erklære en brugervariabel for at passere som denne parameter. Og så skal du vælge den brugervariabel for at få dens værdi alligevel.

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

Når du returnerer resultatsæt fra en lagret procedure, er det nemmest at bruge en SELECT forespørgsel.



  1. Fejlfinding:For mange omdirigeringer

  2. Antal rækker påvirket af en OPDATERING i PL/SQL

  3. COALESCE-funktion i TSQL

  4. Kontrollerer om mysql-bruger eksisterer