需求: 使用者根據自己的積分兌換商品;
分析: 整個過程設計2個步驟,1.插入使用者-商品兌換關係表中。2.扣除使用者積分。3.商品的數量要相應減少。涉及到多張表操作,肯定用儲存過程要好一些。
#########################
#使用者-商品 兌換關係
#1. 插入記錄
#2. 更改使用者積分
#3. 更改商品數量
#問題是: 當我使用者兌換多個商品時候,我的商品id是乙個list這樣呼叫儲存過程,難道呼叫n次?
##########################
drop
procedure
ifexists ttt;
delimiter $$
create
procedure ttt(cuid char(9
), ggid varchar(15
), num int
)begin
declare
exit
handler
for sqlexception
begin
rollback
;select
'發生錯誤,執行回滾,程式終止'
;end
;##執行dml操作##
insert
into tb_cgconver(cid, gid, cgtime)
values
(cuid, ggid,
now())
;update tb_customer set cintegrals = cintegrals +
1where cid like cuid;
update tb_goods set gstock = gstock - num where gid like ggid;
end$$
delimiter
;call ttt(
'201500762'
,'123131333',5
);
##沒有異常回滾的
drop
procedure tt
delimiter $$
create
procedure tt(customerid char(9
), goodsgid varchar(15
))begin
insert
into tb_cgconver(cid, gid, cgtime)
values
(customerid, goodsgid,
now())
;update tb_customer set cintegrals = cintegrals +
1where cid like customerid;
end$$
delimiter
;###插入使用者-商品兌換表 修改使用者積分
call tt(
'201500762'
,'123456782');
create
procedure pr_add(a int
, b int
)begin
declare c int
;if a is
null
then
set a =0;
endif
;if b is
null
then
set b =0;
endif
;set c = a + b;
select c as sum;
end;
call pr_add(10,
20);###################################
drop
procedure ff;
create
procedure ff(
)begin
select
*from tb_auto;
select
*from tb_customer;
endcall ff(
);
參考文獻
mysql記錄儲存過程異常情況
mysql的規範官方
Oracle中儲存過程
1 建立乙個儲存過程 create or replace procedure pro name parameter1 parameter2 is as begin plsql sentences pl sql語句,儲存過程功能實現的主體 exception dowith sentences 異常處理...
mysql中儲存過程
delimiter,簡單解釋下這個命令的用途,在mysql中每行命令都是用 結尾,回車後自動執行,在儲存過程中 往往不代表指令結束,馬上執行,而delimiter原本就是 的意思,因此用這個命令轉換一下 為 這樣只有收到 才認為指令結束可以執行 檢視myql中已經存在的儲存過程 show proce...
mysql中儲存過程
儲存過程,其本質還是函式 但其規定 不能有返回值 說明 1,in 用於設定該變數是用來 接收實參資料 的,即 傳入 預設不寫,就是in 2,out 用於設定該變數是用來 儲存儲存過程中的資料 的,即 傳出 即函式中必須對它賦值 3,inout 是in和out的結合,具有雙向作用 4,對於,out和i...