建立智慧型預存程序
迄今為止所使用的所有預存程序基本上都是封裝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;分析:此預存程序有很大的變動。首先,增加了註解(前面放置 -- )。在儲存過程複雜性增加時,這樣做特別重要。增加了另一個參數 taxable ,它是一個布林值(如果要增加稅則為真,否則為假)。在儲存過程體中,用 DECLARE 語句定義了兩個局部變數。 DECLARE 要求指定變數名稱和資料類型,它也支援可選的預設值(這個例子中的 taxrate 的預設被設定為 6% )。 SELECT 語句已經改變,因此其結果儲存到 total (局部變數)而不是 ototal 。 IF 語句檢查 taxable 是否為真,如果為真,則用另一 SELECT 語句增加營業稅到局部變數 total 。最後,用另一 SELECT 語句將total (它增加或許不增加營業稅)保存到 ototal 。 COMMENT 關鍵字 本範例中的預存程序在 CREATE PROCEDURE 語句中包含了一個 COMMENT 值。它不是必需的,但如果給出,將在 SHOW PROCEDURE STATUS 的結果中顯示。這顯然是一個更高級,功能更強的預存程序。為試驗它,請用以下兩個語句:輸入:
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中文網其他相關文章!