建立智慧型預存程序
迄今為止所使用的所有預存程序基本上都是封裝MySQL簡單的 SELECT語句。雖然它們全都是有效的儲存過程例子,但它們所能完成的工作你直接用這些被封裝的語句就能完成(如果說它們還能帶來更多的東西,那就是使事情更複雜)。只有在儲存過程內包含業務規則和智慧處理時,它們的威力才真正顯現出來。
考慮這個場景。你需要獲得與以前一樣的訂單合計,但需要對合計增加營業稅,不過只針對某些顧客(或許是你所在州中那些顧客)。那麼,你需要做下面幾件事情:
1.獲得合計(與以前一樣);
2.把營業稅有條件地加到合計;
##3 .返回合計(帶稅或不帶稅)。 預存程序的完整工作如下:輸入:-- Name:ordertotal -- Parmeters:onumber = order number -- taxable = 0 if not taxable -- ototal = order total variable create procedure ordretotal( in onumber int, in taxable boolean, out ototal decimal(8,2) )comment 'obtain order total,optiomally adding tax' begin -- dexlare variable for total declare total decimal(8,2); -- delcare tax percentage declare taxtate int default 6; -- get the ordertotal select sum(item_price*quantity) from orderitems where order_num = onumber into total; -- is this taxable? if taxable then -- yes,so add taxrate to the total select total+(total/100*taxrate) into total; end if; -- and finally,save to out variable select total into ototal; end;
call ordertotal(20005,0,@total); select @total;
##輸入:
call ordertotal(20005,1,@total); select @total;
輸出:
分析:BOOLEAN 值指定為1 表示真,指定為0 表示假(實際上,非零值都考慮為真,只有0 被視為假)。透過給中間的參數指定 0 或 1 ,可以有條件地將營業稅加到訂單總計上。
IF 語句 這個範例給了MySQL的 IF 語句的基本用法。 IF 語句也支援 ELSEIF 和 ELSE 子句(前者也使用 THEN 子句,後者不使用)。在以後章節中我們將會看到 IF 的其他用法(以及其他流控制語句)。
為顯示用來建立一個預存程序的CREATE 語句,使用SHOW CREATE
PROCEDURE 語句:
輸入:
show create procedure ordetotal;
為了取得包括何時、由誰建立等詳細資訊的預存程序列表,使用SHOW PROCEDURE STATUS 。
限制過程狀態結果 SHOW PROCEDURE STATUS 列出所有預存程序。為限制其輸出,可使用 LIKE 指定一個過濾模式,例如:
show procedure status like 'ordertotal';
以上是MySQL預存程序-建立智慧型預存程序和檢查預存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!