Mysql分页存储过程

本文介绍了一个用于数据库分页查询的存储过程实现方法。该存储过程支持动态SQL构造,能够根据传入的参数灵活地进行查找和排序,并提供统计数据和分页数据两种输出方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Create  procedure  `proc_pager`(

    _WhereClause  VARCHAR(2000),    -- 查找条件
    _OrderBy  VARCHAR(2000),   -- 排序条件
    _PageSize   INT ,    -- 每页记录数
    _PageIndex  INT ,   -- 当前页码
    _DoCount    BIT    -- 标志:统计数据/输出数据
)
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
 -- 定义key字段临时表
 DROP TABLE IF EXISTS _TempTable_KeyID;  -- 删除临时表,如果存在
 CREATE TEMPORARY  TABLE  _TempTable_KeyID
 (
userid INT
 )TYPE=HEAP;

 -- 构建动态的sql,输出关键字key的id集合
 -- 查找条件

 SET @sql = 'SELECT  userid FROM mysqltestuser';
 IF (_WhereClause is NOT NULL)  AND (_WhereClause <> '') THEN
 SET @sql= concat(@sql, ' WHERE ' ,_WhereClause);
 END if;

 IF (_OrderBy is NOT NULL)  AND  (_OrderBy <>'') THEN
 SET @sql= concat( @sql , ' ORDER BY ' , _OrderBy);
 END IF;

 -- 准备id记录插入到临时表
 set @sql=concat('insert into _TempTable_KeyID(userid)', @sql);
 PREPARE stmt FROM @sql;
 EXECUTE stmt ;
 DEALLOCATE PREPARE stmt;
-- key的id集合  [end]

-- 下面是输出
IF (_DoCount=1) then  -- 统计
     BEGIN
          SELECT COUNT(*) AS RecordCount FROM _TempTable_KeyID;
     END;
ELSE                 -- 输出记录集
     BEGIN
         -- 计算记录的起点位置
 SET @startPoint = ifnull((_PageIndex-1)*_PageSize,0);
         SET @sql='        SELECT     A.*
   FROM    mysqltestuser A
   INNER JOIN _TempTable_KeyID B
   ON  A.userid =B.userid  ';

 SET @sql=CONCAT(@sql,"  LIMIT  ",@startPoint," ,",_PageSize);
         PREPARE stmt FROM @sql;
 EXECUTE stmt ;
 DEALLOCATE PREPARE stmt;
     END;
END IF;

 DROP TABLE _TempTable_KeyID;

END;


--------------------------------   

-- 统计数据
call `proc_pager`(null, null, null, null, 1)
-- 输出数据,没条件限制,10条记录/页,第一页
call `proc_pager`(null, null, 10, 1,0)
-- 输出数据,条件限制,排列, 10条记录/页,第一页
call `proc_pager`('chinesename like ''%飞3%''', 'userid asc', 10, 1, 0)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值