Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan hasil SELECT untuk menjalankan kueri UPDATE dengan Prosedur Tersimpan 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 ;

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bantuan Algoritma Kueri PHP MYSQL

  2. Kursor di MySQL - Baik atau Buruk

  3. Normalisasi membuat penggabungan di beberapa tabel menjadi sulit

  4. Menghubungkan Visual c++ 2008 ke MySql

  5. Diperlukan untuk menggabungkan 2 tabel dengan FK mereka di tabel ke-3