CreatePROCEDURE`mysqltestuser_Select_PageAble`(
_WhereClauseVARCHAR(2000),--查找条件
_OrderByVARCHAR(2000),--排序条件
_PageSizeINT,--每页记录数
_PageIndexINT,--当前页码
_DoCountBIT--标志:统计数据/输出数据
)
NOTDETERMINISTIC
SQLSECURITYDEFINER
COMMENT''
BEGIN
--定义key字段临时表
DropTABLEIFEXISTS_TempTable_KeyID;--删除临时表,如果存在
CreateTEMPORARYTABLE_TempTable_KeyID
(
useridINT
)TYPE=HEAP;
--构建动态的sql,输出关键字key的id集合
--查找条件
SET@sql='SelectuseridFROMmysqltestuser';
IF(_WhereClauseisNOTNULL)AND(_WhereClause<>'')THEN
SET@sql=concat(@sql,'Where',_WhereClause);
ENDif;
IF(_OrderByisNOTNULL)AND(_OrderBy<>'')THEN
SET@sql=concat(@sql,'orDERBY',_OrderBy);
ENDIF;
--准备id记录插入到临时表
set@sql=concat('insertinto_TempTable_KeyID(userid)',@sql);
PREPAREstmtFROM@sql;
EXECUTEstmt;
DEALLOCATEPREPAREstmt;
--key的id集合[end]
--下面是输出
IF(_DoCount=1)then--统计
BEGIN
SelectCOUNT(*)ASRecordCountFROM_TempTable_KeyID;
END;
ELSE--输出记录集
BEGIN
--计算记录的起点位置
SET@startPoint=ifnull((_PageIndex-1)*_PageSize,0);
SET@sql='SelectA.*
FROMmysqltestuserA
INNERJOIN_TempTable_KeyIDB
ONA.userid=B.userid';
SET@sql=CONCAT(@sql,"LIMIT",@startPoint,",",_PageSize);
PREPAREstmtFROM@sql;
EXECUTEstmt;
DEALLOCATEPREPAREstmt;
END;
ENDIF;
DropTABLE_TempTable_KeyID;
END;
DROPPROCEDUREIFEXISTSpr_pager;
CREATEPROCEDUREpr_pager(
INp_table_nameVARCHAR(1024),/*表名*/
INp_fieldsVARCHAR(1024),/*查询字段*/
INp_page_sizeINT,/*每页记录数*/
INp_page_nowINT,/*当前页*/
INp_order_stringVARCHAR(128),/*排序条件(包含ORDER关键字,可为空)*/
INp_where_stringVARCHAR(1024),/*WHERE条件(包含WHERE关键字,可为空)*/
OUTp_out_rowsINT/*输出记录总数*/
)
NOTDETERMINISTIC
SQLSECURITYDEFINER
COMMENT'分页存储过程'
BEGIN
/*定义变量*/
DECLAREm_begin_rowINTDEFAULT0;
DECLAREm_limit_stringCHAR(64);
/*构造语句*/
SETm_begin_row=(p_page_now-1)*p_page_size;
SETm_limit_string=CONCAT('LIMIT',m_begin_row,',',p_page_size);
SET@COUNT_STRING=CONCAT('SELECTCOUNT(*)INTO@ROWS_TOTALFROM',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);
/*预处理*/
PREPAREcount_stmtFROM@COUNT_STRING;
EXECUTEcount_stmt;
DEALLOCATEPREPAREcount_stmt;
SETp_out_rows=@ROWS_TOTAL;
PREPAREmain_stmtFROM@MAIN_STRING;
EXECUTEmain_stmt;
DEALLOCATEPREPAREmain_stmt;
END;
分享到:
相关推荐
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...
mysql 存储过程 ,存储函数的调用示例
资源包中囊括了MySQL数据库中的存储过程的...该资源下所有内容都是本人的日常软件开发经验总结,对于初学者使用MySQL存储过程的程序员具有重要参考价值,问大家要10分是不过分的,用过就知道了,欢迎大家下载参考及使用
user_id,duty_time 排序,分页控制逻辑,四条记录组成一条记录显示,此处一同天的日期为轴,控制分页
php中调用MySQL存储过程示例
java操作mysql存储过程的例子.doc
在MySQL 入门教程中,我们能够看到很多关于如何创建储存过程 和如何利用 IN 和 OUT 参数调用存储过程的示例。这些示例都很简单,能够很好的帮助你理解 MySQL 中创建带参数存储过程的语法。这些示例已在 MySQL 5.5 中...
MySQL触发器、存储过程、自定义函数、视图简单示例
--1、创建存储过程-- if exists (select * from sysobjects where name='Sum_wage') drop procedure Sum_wage GO create procedure Sum_wage @PWage int, @AWage int, @total int as while (1=1) begin if (select...
mysql;mysql基础语法&存储过程示例.pdf
mysql;mysql基础语法&存储过程示例.zip
主要介绍了Node.js中调用mysql存储过程示例,本文在windows环境测试通过,本文一并给出了创建数据库、录入数据、创建存储过程、调用存储过程等例子,需要的朋友可以参考下
创建存储过程时可以输入输出参数,下面是一个mysql存储过程的创建示例,需要的朋友可以参考下
Mysql存储过程、游标、函数调用、事务处理、触发器代码示例,可用作学习参考。
以下是一个创建存储过程的示例: CREATE PROCEDURE GetCustomerOrders ( IN customerId INT ) CALL GetCustomerOrders(1234); 存储过程中使用变量: 可以在存储过程中声明变量,以便进行多次查询。以下是...
以下是一个创建存储过程的示例: CREATE PROCEDURE GetCustomerOrders ( IN customerId INT ) CALL GetCustomerOrders(1234); 存储过程中使用变量: 可以在存储过程中声明变量,以便进行多次查询。以下是...
主要介绍了python连接mysql调用存储过程示例,需要的朋友可以参考下
本节主要介绍了Mysql存储过程循环内如何嵌套使用游标,详细实现如下,需要的朋友不要错过
MySQL 入门文档、示例 创建表、修改表、删除表 表约束、 管理视图、索引、函数、存储过程、触发器