Mysql 儲存過程

2022-03-01 10:07:29 字數 2703 閱讀 9144

分頁功能在任何應用中都比較常見,而

mysql

的儲存過程分頁必須通過動態

sql 來執行。

分頁對應的

offset

和row_count

必須先用

concat 函式變成字串組裝到 sql

中(如語句

1),而不能直接使用(如語句2,

mysql

不支援)。

mysql

分頁功能的實現如下**所示:

create

procedure test_proc_multi_select(in i_pageindex int, in i_pagesize int

)begin

declare stmt varchar(2000

);

set@sql

= concat('

select * from testproc limit

',(i_pageindex-

1) * i_pagesize,'

, ',i_pagesize); --

語句1組裝sql

prepare stmt from

@sql; --

得到prepare stmt

execute stmt; --

執行select

--////以下方式編譯不能通過!

--select * from testproc limit (i_pageindex-1)*i_pagesize,i_pagesize; -- 語句2

end

以下**提供了帶

where

條件的分頁:

create

procedure test_proc_param_select(in i_name varchar(100),in i_pageindex int, in i_pagesize int

)begin

declare stmt varchar(2000

);

set@sql

= concat('

select * from testproc where name like ''%

',i_name,'%''

limit

',(i_pageindex-

1) * i_pagesize,'

,',i_pagesize); --

注意like後兩個單引號表示乙個。

prepare stmt from

@sql

;

execute

stmt;

end;

補充:所有不需要拼接就可以執行的儲存過程,都可以借用concat()函式,變成字串組裝到sql中。

方式1:

drop

procedure

ifexists

`proc_user_findbyid`$$

create definer=`root`@`%` procedure `proc_user_findbyid`(in id varchar(40

))begin

select

*from td_user where uid =

id;end

執行儲存過程:call proc_user_findbyid('000000000002');

方式2:

drop

procedure

ifexists

`proc_user_findbyid`$$

create definer=`root`@`%` procedure `proc_user_findbyid`(in id varchar(40

))begin

declare sqlstr varchar(2000

);

set@sqlvalue

= concat('

select * from td_user where uid =

',id);

prepare sqlstr from

@sqlvalue

;

execute

sqlstr;

end執行儲存過程:call proc_user_findbyid('000000000002');

兩個儲存過程,執行的的結果是一樣的。

後記:2014/3/17。上述兩種方法的儲存過程會有所不同。

例子,如下圖,原資料:

情況一,執行 call proc_user_findbyid 儲存過程,得到結果如圖:

顯示的只有一條資料,準確無誤!

情況二,執行 call proc_user_findbyid 儲存過程,得到結果如圖:

顯示的有兩條資料。出現了一條類似於like功能的資料,顯然跟我們想要的資料不一致。

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...

mysql 儲存過程 MySQL儲存過程

目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...