db2 获取返回的游标_MySQL ------ 存储过程与游标简单使用
存儲過程小例子
如完成以下事情,獲得與之前一樣的訂單合計,但需要對合計增加營業(yè)稅,不過只針對某些顧客
主要就是:1、獲得合計2、把營業(yè)稅有條件的添加到合計 3、返回合計(帶或不帶稅)
delimiter $$-- 存儲過程的名字時 : proce_ordertotal-- 主要參數(shù): onumber = order number-- taxable = 0 if not taxable,1 if taxable-- ototal = order total variablecreate procedure proce_ordertotal ( in onumber int,in taxable boolean,out ototal decimal(8,1)) comment 'Obtain order total, optionally adding tax'begin-- 創(chuàng)建一個名為 total的局部變量,類型時decimaldeclare total decimal(8,1);-- 創(chuàng)建一個名為 taxrate 的變量,類型時 int 默認(rèn)值時6declare taxrate int default 6;-- 獲取訂單編號為 onumber 的總數(shù)select sum(item_price*quantity) from orderitems where order_num = onumber into total;-- 判斷是否是真if taxable then -- 如果是真 表示要收稅,總共要收 總價*1.06 結(jié)果賦給 totalselect total+(total/100*taxrate) into total;end if ;-- 最后將 total 符給 ototalselect total into ototal;end $$注意:
1、DECLARE 用于在存儲過程體中增加局部變量,需要指定變量名和變量類型,可以給其默認(rèn)值
2、COMMENT關(guān)鍵字使用在創(chuàng)建存儲過程語句中,可寫可不寫,寫的話會在show procedure status 的結(jié)果里顯示
3、BOOLEAN 指定 1 表示真,0 表示假(實際上非零值都考慮為真,只有0視為假)
4、Mysql IF 語句基本用法(if --- then--),而且If語句還支持ELSEIF 和 else 子句(前者還是用THEN子句,后者不需要),SQL server中支持 case when then else
上述中,增加了注釋(--),在復(fù)雜的存儲過程中,注釋時很有必要的,添加了另一個參數(shù)taxable(布爾值,增加稅為真,否則為假)。
在存儲過程體中,使用 declare 語句定義了兩個局部變量,使用時需要給出變量名和數(shù)據(jù)類型,也支持可選的默認(rèn)值(上述設(shè)置為 6%),select 語句發(fā)生了改變,將結(jié)果存儲到 局部變量tota中,if 語句檢查taxable 是否為真,如果為真使用另一條select語句增加到營業(yè)稅到局部變量total 中,最后另一條select 語句將taotal (可能包含稅也可能不包含)保存到ototal中。
查看一下:
結(jié)合游標(biāo)(cursor)一塊使用
create procedure proce_orders()begin-- 定義三個變量declare done boolean default 0;declare o int;declare t decimal(8,2); -- 創(chuàng)建一個游標(biāo) declare cursor_onum cursor for select order_num from orders; -- 當(dāng)沒有行可以循環(huán)時 done 為真declare continue handler for sqlstate '02000' set done=1; -- 創(chuàng)建一個表來存儲結(jié)果create table if not exists ordertotals (order_num int,total decimal(8,2)); -- 打開游標(biāo) open cursor_onum; -- 遍歷所有行repeat -- 獲取訂單號fetch cursor_onum into o; -- 調(diào)用之前創(chuàng)建的存儲過程,傳遞三個參數(shù)call proce_ordertotal(o,1,t); -- 在訂單總數(shù)中插入訂單和合計insert into ordertotals(order_num,total) values(o,t); -- 直到完成結(jié)束重復(fù);until done end repeat; -- 關(guān)閉游標(biāo) close cursor_onum; end $$創(chuàng)建了一個表
上述增加另一個變量 t (存儲訂單合計),此存儲過程中還在運行中創(chuàng)建了一個新表(如果它不存在的話),名為ordertotals這個表將保存存儲過程生成的結(jié)果,FETCH 取出每一個ordernum ,然后call 執(zhí)行另一個存儲過程,來計算每個訂單帶稅的合計(結(jié)果存儲到t) ,最后用insert 保存每個訂單的訂單號和合計。
此存儲過程不返回數(shù)據(jù),但能夠創(chuàng)建和填充另一個表,主要用到了,存儲過程,游標(biāo),逐行處理以及存儲過程調(diào)用其他其他存儲過程。
總結(jié)
以上是生活随笔為你收集整理的db2 获取返回的游标_MySQL ------ 存储过程与游标简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 郑州智慧岛大数据管委会_数据科学融通应用
- 下一篇: postgres 判断null_Post