首頁  >  文章  >  資料庫  >  MySQL預存程序-建立智慧型預存程序和檢查預存程序

MySQL預存程序-建立智慧型預存程序和檢查預存程序

巴扎黑
巴扎黑原創
2017-05-18 11:01:431491瀏覽

建立智慧型預存程序

迄今為止所使用的所有預存程序基本上都是封裝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;

輸出:

MySQL預存程序-建立智慧型預存程序和檢查預存程序##輸入:

call ordertotal(20005,1,@total);
select @total;

輸出:

MySQL預存程序-建立智慧型預存程序和檢查預存程序分析: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn