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:Saya belum menguji ini. Ada kemungkinan MySQL tidak menyukai UPDATE terhadap tabel yang saat ini kursornya terbuka.
PS:Anda harus mempertimbangkan kembali bagaimana Anda menyimpan sandi .
Beri komentar ulang tentang RETURN
vs. OUT
vs. kumpulan hasil:
RETURN
hanya digunakan dalam fungsi tersimpan, bukan prosedur tersimpan. Fungsi tersimpan digunakan saat Anda ingin memanggil rutin dalam ekspresi SQL lain.
SELECT LCASE( checkUserFunc(?, ?) );
Anda dapat menggunakan OUT
parameter, tetapi Anda harus mendeklarasikan variabel pengguna terlebih dahulu untuk lulus sebagai parameter itu. Dan kemudian Anda harus memilih variabel pengguna itu untuk mendapatkan nilainya.
SET @outparam = null;
CALL checkUser(?, ?, @outparam);
SELECT @outparam;
Saat mengembalikan kumpulan hasil dari prosedur tersimpan, paling mudah menggunakan SELECT
pertanyaan.