Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на набор от резултати SELECT за изпълнение на заявка UPDATE с 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:Не съм тествал това. Възможно е MySQL да не харесва UPDATE спрямо таблица, за която в момента има отворен курсор.

PS:Трябва да преразгледате как съхранявате пароли .

Повторете коментар относно RETURN срещу OUT спрямо набор от резултати:

RETURN се използва само в съхранени функции, а не в съхранени процедури. Съхранените функции се използват, когато искате да извикате подпрограмата в друг SQL израз.

SELECT LCASE( checkUserFunc(?, ?) );

Можете да използвате OUT параметър, но първо трябва да декларирате потребителска променлива, която да премине като този параметър. И тогава трябва да изберете тази потребителска променлива, за да получите стойността й.

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

Когато връщате набори от резултати от съхранена процедура, най-лесно е да използвате SELECT запитване.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Google Data Studio - Cloud SQL за грешка в конектора на MySQL

  2. Използвайте чувствителен към акцент първичен ключ в MySQL

  3. Динамично създаване на условия ИЛИ чрез предаване на масив към заявка в MySQL PHP

  4. PHP извлича данни от реда на таблицата и съхранява в променлива

  5. Не може да се генерира диаграма на Google, използвайки данни от MySQL таблица като източник на данни