Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Używanie zestawu wyników SELECT do uruchamiania zapytania UPDATE za pomocą procedur składowanych 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 ;

Uwaga:nie testowałem tego. Możliwe, że MySQL nie lubi UPDATE względem tabeli, do której aktualnie ma otwarty kursor.

PS:Powinieneś ponownie rozważyć, jak przechowujesz hasła .

Ponownie komentarz na temat RETURN vs. OUT a zestaw wyników:

RETURN jest używany tylko w funkcjach składowanych, a nie w procedurach składowanych. Przechowywane funkcje są używane, gdy chcesz wywołać procedurę w innym wyrażeniu SQL.

SELECT LCASE( checkUserFunc(?, ?) );

Możesz użyć OUT parametr, ale najpierw musisz zadeklarować zmienną użytkownika, która zostanie przekazana jako ten parametr. A potem musisz wybrać tę zmienną użytkownika, aby mimo wszystko uzyskać jej wartość.

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

Podczas zwracania zestawów wyników z procedury składowanej najłatwiej jest użyć SELECT zapytanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - kod błędu 1005 z numerem błędu 121

  2. Uzyskaj dane z bazy danych mysql za pomocą php i jquery ajax

  3. Licznik widoków PHP SQL przy użyciu PDO read()

  4. Format daty MySQL DD/MM/RRRR zapytanie wybierające?

  5. Złożone zapytania do bazy danych w yii2 z Active Record