Tôi đang sử dụng mysql và tôi cần bằng cách nào đó sử dụng cột curid được trả về bởi câu lệnh đã chuẩn bị trong truy vấn sau này. Tôi sử dụng các câu lệnh đã chuẩn bị bởi vì như tôi đã đọc, đó là cách duy nhất để chuyển một biến sang mệnh đề LIMIT. Tôi có thủ tục lưu trữ này ở đây:
DROP PROCEDURE IF EXISTS fixbalance;
CREATE PROCEDURE fixbalance (userid INT)
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE balance INT DEFAULT 0;
DECLARE idcnt INT;
SET idcnt = (SELECT COALESCE(COUNT(id), 0)
FROM coupon_operations
WHERE user_id = userid);
IF idcnt <> 0 THEN
WHILE i <= idcnt DO
BEGIN
SET @iter = i;
SET @user_id = userid;
SET @sql = CONCAT('SELECT id AS curid
FROM coupon_operations
WHERE user_id = ?
ORDER BY id ASC
LIMIT ?, 1');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @user_id, @iter;
DEALLOCATE PREPARE stmt;
SET balance = balance + (SELECT points
FROM coupon_operations
WHERE user_id = @user_id
AND id = @curid);
UPDATE coupon_operations SET balance = balance;
SET i = i + 1;
END;
END WHILE;
END IF;
END;
|
Điều này không hoạt động - Tôi không chắc chắn làm thế nào để vượt qua đường cong.
CONCAT
trong mã ở trên là gì?