首頁 > 資料庫 > mysql教程 > MySQL預存程序的刪除操作和使用參數的範例詳解

MySQL預存程序的刪除操作和使用參數的範例詳解

巴扎黑
發布: 2017-05-18 11:01:35
原創
3576 人瀏覽過

刪除預存程序

預存程序在建立之後,被保存在伺服器上以供使用,直到被刪除。刪除指令(類似第21章所介紹的語句)從伺服器中刪除預存程序。 為刪除剛建立的預存程序,可使用下列語句:

輸入:

drop procedure productpricing;
登入後複製

分析:這條語句刪除剛建立的預存程序。請注意沒有使用後面的 () ,只給出預存程序名稱。

僅在存在時刪除 如果指定的過程不存在,則 DROP PROCEDURE將產生一個錯誤。當過程存在想刪除它時(如果過程不存在也不產生錯誤)可使用 DROP PROCEDURE IF EXISTS。


使用參數

#productpricing 只是一個簡單的預存過程,它簡單地顯示SELECT 語句的結果。一般,預存程序不會顯示結果,而是把結果回傳給你指定的變數。

變數(variable)記憶體中特定的位置,用來暫時儲存資料。以下是productpricing 的修改版本(如果不先刪除此預存程序,則不能再次建立它):

輸入:

create procedure productpricing(
out pl decimal(8,2),
out ph decimal(8,2),
out pa decimal(8,2)
)
begin
select min(prod_price) into pl from products;
select max(prod_price) into ph from products;
select avg(prod_price) into pa from products;
end;
登入後複製

分析:此預存程序接受3個參數: pl 儲存產品最低價格, ph 儲存產品最高價格, pa 儲存產品平均價格。每個參數必須具有指定的類型,這裡使用十進制值。關鍵字 OUT 指出對應的參數用來從預存程序傳出一個值(傳回給呼叫者)。 MySQL支援 IN (傳遞給預存程序)、 OUT (從預存程序傳出,如這裡所用)和 INOUT (對預存程序傳入和傳出)類型的參數。預存程序的程式碼位於 BEGIN 和 END 語句內,如前所見,它們是一系列SELECT 語句,用來檢索值,然後儲存到對應的變數(透過指定 INTO 關鍵字)。

參數的資料型態 預存程序的參數允許的資料型別與表中所使用的資料型別相同。附錄D列出了這些類型。

注意,記錄集不是允許的類型,因此,不能透過一個參數傳回多個行和列。這就是前面的例子為什麼要使用3個參數(和3條 SELECT 語句)的原因。為呼叫此修改過的預存程序,必須指定3個變數名,如下所示:

輸入:

call productpricing(@price low,
@pricehigh,
@priceaverage);
登入後複製

分析:由於此預存程序要求3個參數,因此必須剛好傳遞3個參數,不多也不少。所以,這 CALL 語句給定3個參數。它們是預存程序將保存結果的3個變數的名字。

變數名稱 所有MySQL變數都必須以 @ 開始。

在呼叫時,這條語句並沒有顯示任何資料。它會傳回以後可以顯示(或在其他處理中使用)的變數。 為了顯示檢索出的產品平均價格,可如下進行:

#
select @priceaverage;
登入後複製

輸出:

MySQL預存程序的刪除操作和使用參數的範例詳解

為了得到3個值,可使用以下語句:

輸入:

select @pricehigh,@pricrlow,@priceaverage;
登入後複製

輸出:

MySQL預存程序的刪除操作和使用參數的範例詳解

##下面是另一個例子,這次使用IN 和OUT 參數。 ordertotal 接受訂單

號碼並傳回該訂單的合計:

輸入:

create procedure ordertotal(
in onumber int,
out ototal decimal(8,2)
)
begin
select sum(item_price*quantity) from orderitems where order_num = onumber into ototal;
end;
登入後複製

分析:onumber 定義為 IN ,因為訂單號碼被傳入儲存程序。 ototal 定義為 OUT ,因為要從預存程序傳回合計。 SELECT 語句使用這兩個參數, WHERE 子句使用 onumber 選擇正確的行, INTO 使用 ototal 儲存計算出來的總和。

為呼叫這個新預存程序,可使用下列語句:

輸入:

call ordertotal(20005,@total);
登入後複製

分析:必須傳遞給ordertotal 兩個參數;第一個參數為訂單編號,第二個參數為包含計算出來的總和的變數名稱。

為了顯示此合計,可如下進行:

輸入:

select @total;
登入後複製

輸出:

MySQL預存程序的刪除操作和使用參數的範例詳解

分析:@ total 已由ordertotal 的CALL 語句填寫, SELECT 顯示它所包含的值。

為了得到另一個訂單的總和顯示,需要再次呼叫預存程序,然後重新顯示變數:

#輸入:

call ordertotal(20009,@total);
select @total;
登入後複製

以上是MySQL預存程序的刪除操作和使用參數的範例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板