DECLARE bSize INT;
SET bSize = (pagNo - 1) * pagSize;
...
SELECT ... FROM view_role_phonerecord
WHERE UserId = userId
LIMIT bSize, pagSize; -- 報錯 1064
MySQL 不允許在 `LIMIT` 後直接使用局部變量。
CREATE PROCEDURE Query_Role_PhoneRecord(
IN userId BINARY(16),
IN pagNo INT,
IN pagSize INT
)
BEGIN
DECLARE bSize INT DEFAULT 0;
SET bSize = (pagNo - 1) * pagSize;
IF (bSize < 0) THEN SET bSize = 0; END IF;
-- 構建動態 SQL
SET @sql = CONCAT('SELECT `ID`, `LimId`, `Recordor`, `RecordTime`, `BDID`, `Caller`, `PhonNo`, `CallType`, `Record`, `IsRecordorActive`
FROM `cemscenter`.`view_role_phonerecord`
WHERE `UserId` = ?
LIMIT ?, ?');
PREPARE stmt FROM @sql;
SET @u = userId, @offset = bSize, @limit = pagSize;
EXECUTE stmt USING @u, @offset, @limit;
DEALLOCATE PREPARE stmt;
END
PREPARE / EXECUTE / DEALLOCATE PREPARE 是運行時動態 SQL 的標準流程。