这是一段从网上搜到的代码,但是会报oRowsTotal没有定义的错误Error Code : 1193
Unknown system variable 'oRowsTotal'DROP PROCEDURE IF EXISTS `PtBase`.`prPager`;
CREATE PROCEDURE `PtBase`.`prPager`(
OUT oRowsTotal INT, --输出记录总数
IN iTableName VARCHAR(800), --表名
IN iFields VARCHAR(800), --查询字段
IN iPageSize INT, --每页记录数
IN iPageNow INT, --当前页
IN iOrderString VARCHAR(100), --排序条件
IN iWhereString VARCHAR(800) --WHERE条件
)
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE _beginRow INT DEFAULT 0;
DECLARE _mainString VARCHAR(8000);
DECLARE _limitString VARCHAR(100);
DECLARE _countString VARCHAR(8000);
SET _beginRow = (iPageNow - 1) * iPageSize;
SET _limitString = CONCAT(' LIMIT ', beginRow, ', ', iPageSize);
SET _countString = CONCAT('SET oRowsTotal = SELECT COUNT(*) FROM ', iTableName, ' WHERE ', iWhereString);
SET _mainString = CONCAT('SELECT ', iFields, ' FROM ', iTableName, ' WHERE ', iWhereString, iOrderString, _limitString); SET @countStr = _countString;
PREPARE countStmt FROM @countStr;
EXECUTE countStmt;
DEALLOCATE PREPARE countStmt; SET @mainStr = _mainString;
PREPARE mainStmt FROM @mainStr;
EXECUTE mainStmt;
DEALLOCATE PREPARE mainStmt;
END;
Unknown system variable 'oRowsTotal'DROP PROCEDURE IF EXISTS `PtBase`.`prPager`;
CREATE PROCEDURE `PtBase`.`prPager`(
OUT oRowsTotal INT, --输出记录总数
IN iTableName VARCHAR(800), --表名
IN iFields VARCHAR(800), --查询字段
IN iPageSize INT, --每页记录数
IN iPageNow INT, --当前页
IN iOrderString VARCHAR(100), --排序条件
IN iWhereString VARCHAR(800) --WHERE条件
)
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE _beginRow INT DEFAULT 0;
DECLARE _mainString VARCHAR(8000);
DECLARE _limitString VARCHAR(100);
DECLARE _countString VARCHAR(8000);
SET _beginRow = (iPageNow - 1) * iPageSize;
SET _limitString = CONCAT(' LIMIT ', beginRow, ', ', iPageSize);
SET _countString = CONCAT('SET oRowsTotal = SELECT COUNT(*) FROM ', iTableName, ' WHERE ', iWhereString);
SET _mainString = CONCAT('SELECT ', iFields, ' FROM ', iTableName, ' WHERE ', iWhereString, iOrderString, _limitString); SET @countStr = _countString;
PREPARE countStmt FROM @countStr;
EXECUTE countStmt;
DEALLOCATE PREPARE countStmt; SET @mainStr = _mainString;
PREPARE mainStmt FROM @mainStr;
EXECUTE mainStmt;
DEALLOCATE PREPARE mainStmt;
END;
limit 0,100 就是取出前100条数据
至于总数可以先count()一下。
SET _countString = CONCAT('SELECT COUNT(*) into oRowsTotal FROM ', iTableName, ' WHERE ', iWhereString);
Undeclared variable: oRowsTotal
...
EXECUTE countStmt;SET oRowsTotal = @oRowsTotal ;
DECLARE _beginRow INT DEFAULT 0;
DECLARE _mainString VARCHAR(8000);
DECLARE _limitString VARCHAR(100);
DECLARE _countString VARCHAR(8000);
SET _beginRow = (iPageNow - 1) * iPageSize;
SET _limitString = CONCAT(' LIMIT ', beginRow, ', ', iPageSize);
SET _mainString = CONCAT('SELECT SQL_CALC_FOUND_ROWS ', iFields, ' FROM ', iTableName, ' WHERE ', iWhereString, iOrderString, _limitString); SET @mainStr = _mainString;
PREPARE mainStmt FROM @mainStr;
EXECUTE mainStmt;
DEALLOCATE PREPARE mainStmt;
set oRowsTotal = FOUND_ROWS() ;
END;