1create procedure addcheckout (
2_proid int,
3 --商品主鍵
4 _oprerator varchar (50
),5 --操作人
6_checkoutnum int,
7 --出庫數量
8 out result int --返回的儲存過程是否執行成功的標誌位9)
10begin
11 --接收錯誤資訊的標識變數
12 declare err_flag int default 0;13
14 declare snum int default 0;15
16 --處理可能會發生的錯誤
17 declare continue handler for sqlexception set err_flag = 1;18
19 --開啟事務
20start transaction;
2122 --拿到庫存的值
23 set snum = (select storenumber from tb_product where pid =_proid);
2425 --如果庫存量小於了出庫量
26 if snum <_checkoutnum then
27 set result = 2;--說明庫存不足
28 rollback;--回滾
29else
30 --更新庫存量
31 update tb_product set storenumber = storenumber - _checkoutnum where pid =_proid;
32 --生成出庫單
33insert into tb_checkoutbill (proid,oprerator,checkoutnum) values(_proid,_oprerator,_checkoutnum);
34 --判斷是否發生了錯誤
35 if err_flag = 1
then
36 set result = 0; --說明執行失敗
37 rollback; --回滾
38else
39 set result = 1; --說明執行成功
40 commit; --提交
41end if;
42end if;
43end;
44 --出庫儲存過程的呼叫測試
45 call addcheckout (4, '
張三', 120
,@num);
4647
select @num;
4849 --分頁儲存過程
50create procedure productpage (
51 _sqlwhere varchar (4000
),52
_pageindex int,
53_pagesize int,
54out rowcount int55)
56begin
57 declare startrow int default 0; --定義乙個接收計算要跳過的資料量的變數
58 set startrow = (_pageindex - 1) *_pagesize;
5960 --分頁的sql語句
61 set @sqlstr = concat("
select sql_calc_found_rows * from tb_product p join tb_store s on p.storeid=s.sid
",_sqlwhere,"
limit
",startrow,","
,_pagesize);
6263
prepare sqlquery from @sqlstr;
6465
execute sqlquery;
6667 deallocate prepare sqlquery;--銷毀預處理變數 清理記憶體
68 --取得總資料量
69 set rowcount =found_rows();
70end;
7172 --分頁儲存過程的呼叫測試
73 call productpage ('', 1, 2
,@num);
7475 select @num;
分頁儲存過程 分頁儲存過程
分頁儲存過程 alter proc dbo p pageshow pagesize int,每頁大小 currentpage int out,當前頁 housename nvarchar 50 房產名稱 totalcount int out,總記錄數 totalpage int out 總頁數 as...
通用儲存過程 分頁儲存過程
名稱 spall returnrows 輸入 輸出 呼叫 exec spall returnrows select from 表名 頁號,返回記錄數,主鍵 排序字段 spall returnrows select from all categories 2,10,id id 說明 百萬級 通用儲存過...
分頁儲存過程
create proc p sobigo percentpage tblname varchar 255 t category 表名 strgetfields varchar 1000 需要返回的列 fldname varchar 255 排序的欄位名 pagesize int 10,頁尺寸 pag...