CREATE TABLE `ttt` ( `a` int(11) NOT NULL DEFAULT '0', `b` varchar(6) DEFAULT NULL, PRIMARY KEY (`a`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `ttt` VALUES (1, '2'); INSERT INTO `ttt` VALUES (2, '4'); INSERT INTO `ttt` VALUES (3, '3'); CREATE DEFINER=`root`@`localhost` PROCEDURE `pr_pager`( IN p_table_name VARCHAR(1024),/*表名*/ IN p_fields VARCHAR(1024),/*查询字段*/ IN p_page_size INT,/*每页记录数*/ IN p_page_now INT,/*当前页*/ IN p_order_string VARCHAR(128),/*排序条件(包含ORDER关键字,可为空)*/ IN p_where_string VARCHAR(1024),/*WHERE条件(包含WHERE关键字,可为空)*/ OUT p_out_rows INT/*输出记录总数*/ ) COMMENT '分页存储过程' BEGIN /*定义变量*/ DECLARE m_begin_row INT DEFAULT 0; DECLARE m_limit_string CHAR(64); /*构造语句*/ SET m_begin_row = (p_page_now - 1) * p_page_size; SET m_limit_string = CONCAT(' LIMIT ', m_begin_row, ', ', p_page_size); SET @COUNT_STRING = CONCAT('SELECT COUNT(*) INTO @ROWS_TOTAL FROM ', p_table_name, ' ', p_where_string); SET @MAIN_STRING = CONCAT('SELECT ', p_fields, ' FROM ', p_table_name, ' ', p_where_string, ' ', p_order_string, m_limit_string); /*预处理*/ PREPARE count_stmt FROM @COUNT_STRING; EXECUTE count_stmt; DEALLOCATE PREPARE count_stmt; SET p_out_rows = @ROWS_TOTAL; PREPARE main_stmt FROM @MAIN_STRING; EXECUTE main_stmt; DEALLOCATE PREPARE main_stmt; END call pr_pager("ttt","a",3,1, "","",@result);
Mysql分页存储过程
猜你喜欢
转载自solomon2012.iteye.com/blog/2123245
今日推荐
周排行