使用預存程序
使用預存程序需要知道如何執行(運行)它們。預存程序的執行遠比其定義更常遇到,因此,我們將從執行預存程序開始介紹。然後再介紹建立和使用預存程序。
執行預存程序
MySQL稱預存程序的執行為調用,因此MySQL執行預存程序的語句為 CALL 。 CALL 接受預存程序的名字以及需要傳遞給它的任意參數。請看以下範例:
輸入:
call productpricing(@pricelow,@pricehigh,@priceaverage);
分析:其中,執行名為 productpricing 的儲存過程,它計算並傳回產品的最低、最高和平均價格。
預存程序可以顯示結果,也可以不顯示結果,如稍後所述。
建立預存程序
如所述,編寫預存程序並不是微不足道的事情。為讓你了解這個過程,請看一個例子——一個返回產品平均價格的儲存過程。以下是其程式碼:
輸入:
create procedure productpricing() begin select avg(prod_price) as priceaverage from products;end;
分析:我們稍後介紹第一條和最後一條語句。此預存程序名為productpricing ,用 CREATE PROCEDURE productpricing() 語句定義。如果預存程序接受參數,它們將在 () 中列舉出來。此預存程序沒有參數,但後跟的 () 仍然需要。 BEGIN 和 END 語句用來限定預存程序體,過程體本身只會是一個簡單的 SELECT 語句(使用Avg() 函數)。
在MySQL處理這段程式碼時,它會建立一個新的預存程序 product-pricing 。沒有返回數據,因為這段程式碼並未調用預存過程,這裡只是為以後使用而創建它。
mysql 命令列客戶機的分隔符號 如果你使用的是 mysql 命令列實用程序,應該仔細閱讀此說明。
預設的MySQL語句分隔符號為 ; (如你已經在迄今為止所使用的MySQL語句中所看到的)。 mysql 命令列實用程式也使用 ; 作為語句分隔符號。如果命令列實用程式要解釋預存程序本身內的 ; 字符,則它們最終不會成為預存程序的成分,這會使預存程序中的SQL出現句法錯誤。
解決辦法是暫時更改命令列實用程式的語句分隔符,如下所示:
delimiter// create procedure productpricing() begin select avg(prod_price) as priceaverage from products; end // delimiter;
其中, DELIMITER // 告訴命令列實用程式使用// 作為新的語句結束分隔符,可以看到標誌預存程序結束的END 定義為END// 而非END; 。這樣,儲存過程體內的 ; 仍然保持不動,並且正確地傳遞給資料庫引擎。最後,為恢復為原來的語句分隔符,可使用 DELIMITER ; 。除 \ 符號外,任何字元都可以用作語句分隔符號。
如果你使用的是 mysql 命令列實用程序,在閱讀本章時請記住這裡的內容。
那麼,如何使用這個預存程序?如下所示:
輸入:
call productpricing();
輸出:
分析:CALL productpricing(); 執行剛建立的預存程序並顯示傳回的結果。因為預存程序其實是一種函數,所以預存程序名後需要有 () 符號(即使不傳遞參數也需要)。
以上是MySQL預存程序的使用、執行與建立教學課程的詳細內容。更多資訊請關注PHP中文網其他相關文章!