MYSQL5 分頁儲存過程

2021-09-01 06:04:26 字數 3338 閱讀 7209

create procedure pagediv(

in tablename varchar(100),

in filedsnames varchar(500),

in pagesize int,

in pageindex int,

in strwhere varchar(500),

in sortname varchar(500)

)begin

/***************過程簡介**************

mysql5.0通用分頁儲存過程

日期:2009-03-08,婦女節完成噠,嘿嘿^^v

說明:該過程實現了分頁功能。支援where條件及order排序,但不支援group分組及多表級聯查詢

由於mysql目前無法獲取動態sql返回值(需臨時表支援,實現起來太複雜了,暈乙個先@@)

所以將總記錄數及當前頁數首先進行查詢,然後再將總記錄數及頁數放到每一條記錄中

**************引數說明**************

表名in tablename varchar(100),

欄位名,多個欄位以,分隔

in filedsnames varchar(100),

每頁顯示記錄數

in pagesize int,

當前頁in pageindex int,

where條件,多個條件以,分隔

in strwhere varchar(500),

排序,多個排序以,分隔

in sortname varchar(500),

**************呼叫方法**************

call pagediv('t_user','vcname,vcpassword',3,1,'','')

*/declare filedlist varchar(500);/*字段列表*/

declare counts int default 0;/*總記錄數*/

declare intpages int default 0;/*總頁數*/

declare strpages varchar(20);/*總頁數*/

/*獲取總記錄數*/

if strwhere=''||strwhere=null then

set @sqlstr=concat("select count(*) into @counts from ",tablename);

else

set @sqlstr=concat("select count(*) into @counts from ",tablename," where ",strwhere);

end if;

prepare stmt from @sqlstr;

execute stmt;

/*獲取總頁數*/

if strwhere=''||strwhere=null then

set @sqlstr=concat("select count(*)/",pagesize," into @intpages from ",tablename);

else

set @sqlstr=concat("select count(*)/",pagesize," into @intpages from ",tablename," where ",strwhere);

end if;

prepare stmt from @sqlstr;

execute stmt;

/*總頁數返回值小於1的,均按1取值;大於1但有小數字的,則通過擷取字串的方式加1*/

if(@intpages<1) then

set @intpages=1;

elseif(@intpages>1) then

set @strpages=cast(@intpages as char);

if(instr(@strpages,".")>=0) then

set @strpages=left(@strpages,instr(@strpages,".")-1);

set @intpages=cast(@strpages as char)+1;

end if;

end if;

/*分頁操作*/

if filedsnames=''||filedsnames=null then

set filedlist='*';

else

set filedlist=filedsnames;

end if;

if strwhere=''||strwhere=null then

if sortname=''||sortname=null then

set @strsql=concat('select ',filedlist,',',@counts,' as totalrecord ,',@intpages,' as totalpage from ',tablename,' limit ',(pageindex-1)*pagesize,',',pagesize);

else

set @strsql=concat('select ',filedlist,',',@counts,' as totalrecord ,',@intpages,' as totalpage from ',tablename,' order by ',sortname,' limit ',(pageindex-1)*pagesize,',',pagesize);

end if;

else

if sortname=''||sortname=null then

set @strsql=concat('select ',filedlist,',',@counts,' as totalrecord ,',@intpages,' as totalpage from ',tablename,' where ',strwhere,' limit ',(pageindex-1)*pagesize,',',pagesize);

else

set @strsql=concat('select ',filedlist,',',@counts,' as totalrecord ,',@intpages,' as totalpage from ',tablename,' where ',strwhere,' order by ',sortname,' limit ',(pageindex-1)*pagesize,',',pagesize);

end if;

end if;

prepare stmt_strsql from @strsql;

execute stmt_strsql;

deallocate prepare stmt_strsql;

end

MySQL5建立儲存過程例項

以下的文章主要是介紹mysql5建立儲存過程的例項演示,mysql5建立儲存在實際操作中應用的頻率還是很高的,以下就是mysql5建立儲存過程的例項具體描述,希望在你今後的學習中會有所幫助。1 用mysql客戶端登入 2 選擇資料庫 mysql use test 3 查詢當前資料庫有哪些儲存過程 m...

mysql5 新特性 支援儲存過程!!

支援儲存過程是mysql5中乙個很重要的新增特性。因為儲存過程有很多好處 使用者可以重用 和更改控制 和將業務邏輯流程寫入多個應用程式不同的是,使用者只需要寫 一次儲存過程就可以立刻使用許多應用程式來呼叫該過程,從而實現特定的業務邏輯流程。資料庫管理員也可以通過標準的管理函式來處理不同版本中的資料庫...

MySQL5建立儲存過程例項,指南

1 用mysql客戶端登入 2 選擇資料庫 mysql use test 3 查詢當前資料庫有哪些儲存過程 mysql show procedure status where db test 4 建立乙個簡單的儲存過程 mysql create procedure hi select hello 5...