mysql을 사용하고 있으며 나중에 쿼리에서 준비된 문에 의해 반환 된 열 curid를 사용해야합니다. 읽은대로 변수를 LIMIT 절에 전달할 수있는 유일한 방법이기 때문에 준비된 명령문을 사용합니다. 이 저장 프로 시저가 여기 있습니다.
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;
|
작동하지 않습니다. 커드를 전달하는 방법을 잘 모르겠습니다.
CONCAT
위의 코드에서 요점은 무엇입니까?