MySQL存儲過程的使用、執行和創建教程

使用存儲過程

使用存儲過程需要知道如何執行(運行)它們。存儲過程的執行遠比其定義更經常遇到,因此,我們將從執行存儲過程開始介紹。然后再介紹創建和使用存儲過程。

執行存儲過程

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();

輸出:

MySQL存儲過程的使用、執行和創建教程

分析:CALL productpricing(); 執行剛創建的存儲過程并顯示返回的結果。因為存儲過程實際上是一種函數,所以存儲過程名后需要有 () 符號(即使不傳遞參數也需要)。

? 版權聲明
THE END
喜歡就支持一下吧
點贊14 分享