mysql分页存储过程
CREATE PROCEDURE CommonPageProc(
IN p_tablename VARCHAR(1024),
IN p_fields VARCHAR(1024),
IN p_pagesize INT,
IN p_pageindex INT,
IN p_orderfield VARCHAR(128),
IN p_sqlwhere VARCHAR(1024),
OUT p_totalrecord INT
)
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT '分页存储过程'
BEGIN
/*定义变量*/
DECLARE m_begin_row INT DEFAULT 0;
DECLARE m_limit_string CHAR(64);
/*构造语句*/
SET m_begin_row = (p_pageindex - 1) * p_pagesize;
SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ',', p_pagesize);
if (p_sqlwhere<>'' ) THEN
set p_sqlwhere=concat(' where ',p_sqlwhere);
end if;
if p_orderfield<>'' then
set p_orderfield=concat(' order by ',p_orderfield);
end if;
SET @COUNT_STRING = CONCAT('SELECT COUNT(*) INTO @ROWS_TOTAL FROM ', p_tablename, ' ', p_sqlwhere);
SET @MAIN_STRING = CONCAT('SELECT ', p_fields, ' FROM ', p_tablename, ' ', p_sqlwhere, ' ', p_orderfield, m_limit_string);
/*预处理*/
PREPARE count_stmt FROM @COUNT_STRING;
EXECUTE count_stmt;
DEALLOCATE PREPARE count_stmt;
SET p_totalrecord = @ROWS_TOTAL;
PREPARE main_stmt FROM @MAIN_STRING;
EXECUTE main_stmt;
DEALLOCATE PREPARE main_stmt;
END