明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線(xiàn)學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

MySQL存儲(chǔ)過(guò)程的使用、執(zhí)行與創(chuàng)建圖文說(shuō)明教程

[摘要]使用存儲(chǔ)過(guò)程使用存儲(chǔ)過(guò)程需要知道如何執(zhí)行(運(yùn)行)它們。存儲(chǔ)過(guò)程的執(zhí)行遠(yuǎn)比其定義更經(jīng)常遇到,因此,我們將從執(zhí)行存儲(chǔ)過(guò)程開(kāi)始介紹。然后再介紹創(chuàng)建和使用存儲(chǔ)過(guò)程。執(zhí)行存儲(chǔ)過(guò)程MySQL稱(chēng)存儲(chǔ)過(guò)程的執(zhí)行為調(diào)用,因此MySQL執(zhí)行存儲(chǔ)過(guò)程的語(yǔ)句為 CALL 。 CALL 接受存儲(chǔ)過(guò)程的名字以及需要傳遞給它的...
使用存儲(chǔ)過(guò)程

使用存儲(chǔ)過(guò)程需要知道如何執(zhí)行(運(yùn)行)它們。存儲(chǔ)過(guò)程的執(zhí)行遠(yuǎn)比其定義更經(jīng)常遇到,因此,我們將從執(zhí)行存儲(chǔ)過(guò)程開(kāi)始介紹。然后再介紹創(chuàng)建和使用存儲(chǔ)過(guò)程。

執(zhí)行存儲(chǔ)過(guò)程

MySQL稱(chēng)存儲(chǔ)過(guò)程的執(zhí)行為調(diào)用,因此MySQL執(zhí)行存儲(chǔ)過(guò)程的語(yǔ)句為 CALL 。 CALL 接受存儲(chǔ)過(guò)程的名字以及需要傳遞給它的任意參數(shù)。請(qǐng)看以下例子:

輸入:

call productpricing(@pricelow,@pricehigh,@priceaverage);

分析:其中,執(zhí)行名為 productpricing 的存儲(chǔ)過(guò)程,它計(jì)算并返回產(chǎn)品的最低、最高和平均價(jià)格。

存儲(chǔ)過(guò)程可以顯示結(jié)果,也可以不顯示結(jié)果,如稍后所述。


創(chuàng)建存儲(chǔ)過(guò)程

正如所述,編寫(xiě)存儲(chǔ)過(guò)程并不是微不足道的事情。為讓你了解這個(gè)過(guò)程,請(qǐng)看一個(gè)例子——一個(gè)返回產(chǎn)品平均價(jià)格的存儲(chǔ)過(guò)程。以下是其代碼:

輸入:

create procedure productpricing() begin select avg(prod_price) as priceaverage from products;end;

分析:我們稍后介紹第一條和最后一條語(yǔ)句。此存儲(chǔ)過(guò)程名為productpricing ,用 CREATE PROCEDURE productpricing() 語(yǔ)句定義。如果存儲(chǔ)過(guò)程接受參數(shù),它們將在 () 中列舉出來(lái)。此存儲(chǔ)過(guò)程沒(méi)有參數(shù),但后跟的 () 仍然需要。 BEGIN 和 END 語(yǔ)句用來(lái)限定存儲(chǔ)過(guò)程體,過(guò)程體本身僅是一個(gè)簡(jiǎn)單的 SELECT 語(yǔ)句(使用Avg() 函數(shù))。

在MySQL處理這段代碼時(shí),它創(chuàng)建一個(gè)新的存儲(chǔ)過(guò)程 product-pricing 。沒(méi)有返回?cái)?shù)據(jù),因?yàn)檫@段代碼并未調(diào)用存儲(chǔ)過(guò)程,這里只是為以后使用而創(chuàng)建它。

mysql 命令行客戶(hù)機(jī)的分隔符 如果你使用的是 mysql 命令行實(shí)用程序,應(yīng)該仔細(xì)閱讀此說(shuō)明。

默認(rèn)的MySQL語(yǔ)句分隔符為 ; (正如你已經(jīng)在迄今為止所使用的MySQL語(yǔ)句中所看到的那樣)。 mysql 命令行實(shí)用程序也使用 ; 作為語(yǔ)句分隔符。如果命令行實(shí)用程序要解釋存儲(chǔ)過(guò)程自身內(nèi)的 ; 字符,則它們最終不會(huì)成為存儲(chǔ)過(guò)程的成分,這會(huì)使存儲(chǔ)過(guò)程中的SQL出現(xiàn)句法錯(cuò)誤。

解決辦法是臨時(shí)更改命令行實(shí)用程序的語(yǔ)句分隔符,如下所示:

delimiter//
create procedure productpricing()
begin
select avg(prod_price) as priceaverage from products;
end  //
delimiter;

其中, DELIMITER // 告訴命令行實(shí)用程序使用 // 作為新的語(yǔ)句結(jié)束分隔符,可以看到標(biāo)志存儲(chǔ)過(guò)程結(jié)束的 END 定義為 END// 而不是 END; 。這樣,存儲(chǔ)過(guò)程體內(nèi)的 ; 仍然保持不動(dòng),并且正確地傳遞給數(shù)據(jù)庫(kù)引擎。最后,為恢復(fù)為原來(lái)的語(yǔ)句分隔符,可使用 DELIMITER ; 。除 \ 符號(hào)外,任何字符都可以用作語(yǔ)句分隔符。

如果你使用的是 mysql 命令行實(shí)用程序,在閱讀本章時(shí)請(qǐng)記住這里的內(nèi)容。

那么,如何使用這個(gè)存儲(chǔ)過(guò)程?如下所示:

輸入:

call productpricing();

輸出:

1.png

分析:CALL productpricing(); 執(zhí)行剛創(chuàng)建的存儲(chǔ)過(guò)程并顯示返回的結(jié)果。因?yàn)榇鎯?chǔ)過(guò)程實(shí)際上是一種函數(shù),所以存儲(chǔ)過(guò)程名后需要有 () 符號(hào)(即使不傳遞參數(shù)也需要)。

以上就是MySQL存儲(chǔ)過(guò)程的使用、執(zhí)行和創(chuàng)建教程的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。