sql >> データベース >  >> RDS >> Mysql

SELECT結果セットを使用してMySQLストアドプロシージャでUPDATEクエリを実行する

    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についてコメントし直してください vs. OUT 対結果セット:

    RETURN ストアドプロシージャではなく、ストアド関数でのみ使用されます。保存された関数は、別のSQL式内でルーチンを呼び出したい場合に使用されます。

    SELECT LCASE( checkUserFunc(?, ?) );
    

    OUTを使用できます パラメータですが、そのパラメータとして渡すには、最初にユーザー変数を宣言する必要があります。そして、とにかくその値を取得するには、そのユーザー変数を選択する必要があります。

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

    ストアドプロシージャから結果セットを返す場合は、SELECTを使用するのが最も簡単です。 クエリ。



    1. NodeJSMySQL-接続がリリースされているかどうかを知る方法

    2. 複数のDAOがあるのは問題ありませんか?

    3. 一般的なクエリを列として保存しますか?

    4. アプリケーションが起動するたびにリソースIDが変更されますか