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

时间: 2024-10-02 15:45:31

mysql分页存储过程的相关文章

MySql 分页存储过程

DELIMITER $$ #改动分隔符为 $$ DROP PROCEDURE IF EXISTS sp_MvcCommonDataSource$$ #分隔符 CREATE PROCEDURE sp_MvcCommonDataSource ( #输入參数 _fields VARCHAR(2000), #要查询的字段,用逗号(,)分隔 _tables TEXT, #要查询的表 _where VARCHAR(2000), #查询条件 _orderby VARCHAR(200), #排序规则 _page

调用MySql 分页存储过程带有输入输出参数

1 Create PROCEDURE getuser 2 ( 3 IN pageIndex INT, 4 IN pageSize INT, 5 OUT count INT 6 ) 7 8 BEGIN 9 declare pindex int DEFAULT (pageIndex-1)*pageSize; 10 11 select * from lc_user order by id LImit pindex,pageSize; 12 13 SELECT COUNT(id) INTO count

微软企业库5.0 调用 MySql 分页存储过程

1.需要完成两个前置条件后才可以使用 微软企业库5.0 调用 MySql 存储过程 微软企业库5.0 支持 MySql MySql 分页存储过程 2.需要添加一个继承 IParameterMapper 接口的类分配查询参数 using System.Data; using System.Data.Common; using Microsoft.Practices.EnterpriseLibrary.Data; using Grass.Extend; namespace Grass.MySqlDa

MySql通用分页存储过程

MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4000),p_order varchar(100),p_pageindex int,p_pagesize int,out p_recordcount int,out p_pagecount int 5 6$$:begin 7 declare v_sqlcounts varchar(4000); 8

MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?

本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案,因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的场景的,同时,面对能够达到优化的方式要追究其原因,同样的做法,换了个场景,达不到优化效果的,还要追究其原因.个人对此场景在不用情况表示怀疑,然后自己测试了一把,果然发现一些问题,同时也证实了一些预期的想法.

【老码农怀旧】一个简单好用的分页存储过程

数据库存储过程是一组预先创建并用指定的名称存储在数据库服务器上的 SQL 语句,将使用比较频繁或者比较复杂的操作,预先用 SQL 语句写好并用一个指定的名称存储起来,以后当需要数据库提供与已定义好的存储过程的功能相同的服务时,只需再次执行该存储过程. 数据库存储过程的优点: (1)存储过程只在创建时进行编译,以后每次执行存储过程都不需再重新编译,而一般 SQL 语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度. (2)通常,复杂的业务逻辑需要多条 SQL 语句.这些语句要分别

Mysql 分页语句Limit用法

转载自:http://qimo601.iteye.com/blog/1634748 1.Mysql的limit用法 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能. Sql代码   SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数.LIMIT 接受一个或两个数字参数.参数必须

MYSQL中存储过程的创建,调用及语法

MySQL 存储过程是从 MySQL 5.0 开始增加的新功能.存储过程的优点有一箩筐.不过最主要的还是执行效率和SQL 代码封装.特别是 SQL 代码封装功能,如果没有存储过程,在外部程序访问数据库时(例如 PHP),要组织很多 SQL 语句.特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗.现在有了 MySQL 存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高. 第一部分:创建一个简单的无参的存储过程 1 用mysql客户端登入

SQL基础分页存储过程(案例一)

1 --分页 存储过程 案例 2 3 -- 所执行的存储过程 4 create proc pageForUsers 5 @currPage int, --当前页数 6 @pageSize int, --每页多少条记录 7 @count int output --总记录数 8 as 9 declare @firstIndex int 10 declare @lastIndex int 11 declare @sqlText varchar(200) 12 13 --统计总记录数 14 select