1. 程式人生 > 資料庫 >mysql儲存過程之建立(CREATE PROCEDURE)和呼叫(CALL)及變數建立(DECLARE)和賦值(SET)操作方法

mysql儲存過程之建立(CREATE PROCEDURE)和呼叫(CALL)及變數建立(DECLARE)和賦值(SET)操作方法

本文例項講述了mysql儲存過程之建立(CREATE PROCEDURE)和呼叫(CALL)及變數建立(DECLARE)和賦值(SET)操作方法。分享給大家供大家參考,具體如下:

儲存過程建立(CREATE PROCEDURE)和呼叫(CALL)

這個咱就不說什麼定義啦術語啦啥的,直接看著例項來慢慢熟悉它。完事呢,咱們來建立一個名為GetAllProducts()的簡單儲存過程哈,這個GetAllProducts()儲存過程呢,主要是用來從products表中選擇所有產品。咱們來啟動 mysql 客戶端工具並鍵入以下命令:

DELIMITER //
 CREATE PROCEDURE GetAllProducts()
  BEGIN
  SELECT * FROM products;
  END //
DELIMITER ;

咱們來詳細看下上面的sql哈:

  • 第一個命令是DELIMITER //,它與儲存過程語法無關。 DELIMITER語句將標準分隔符 - 分號(;)更改為://。 在這種情況下,分隔符從分號(;)更改為雙斜槓//。為什麼我們必須更改分隔符? 因為我們想將儲存過程作為整體傳遞給伺服器,而不是讓mysql工具一次解釋每個語句。 在END關鍵字之後,使用分隔符//來指示儲存過程的結束。 最後一個命令(DELIMITER;)將分隔符更改回分號(;)。
  • 使用CREATE PROCEDURE語句建立一個新的儲存過程。在CREATE PROCEDURE語句之後指定儲存過程的名稱。在這個示例中,儲存過程的名稱為:GetAllProducts,並把括號放在儲存過程的名字之後。
  • BEGIN和END之間的部分稱為儲存過程的主體。將宣告性SQL語句放在主體中以處理業務邏輯。 在這個儲存過程中,我們使用一個簡單的select查詢來查詢products表中的資料。

通過上面的sql,咱們就算是建立了一個儲存過程了,完事我們就來呼叫儲存過程,來看下呼叫語法:

CALL STORED_PROCEDURE_NAME();

再來看下呼叫GetAllProducts()儲存過程的具體sql:

CALL GetAllProducts();

執行上面的sql你就會看到你在儲存過程中的sql的執行結果了。

變數建立(DECLARE)和賦值(SET)

我們都知道,變數是一個命名資料物件,變數的值可以在儲存過程執行期間更改。我們接下來就嘗試使用儲存過程中的變數來儲存直接/間接結果。 這些變數是儲存過程的本地變數,但是我們得注意,變數必須先聲明後,才能使用它。而我們如果要在儲存過程中宣告一個變數,可以使用DECLARE語句,來看下sql語法:

DECLARE variable_name datatype(size) DEFAULT default_value;

咱們來看下上面的sql具體是什麼意思:

  • 首先,在DECLARE關鍵字後面要指定變數名。變數名必須遵循MySQL表列名稱的命名規則。
  • 其次,指定變數的資料型別及其大小。變數可以有任何mysql資料型別,如INT,VARCHAR,DATETIME等。
  • 最後,當宣告一個變數時,它的初始值為NULL。但是可以使用DEFAULT關鍵字為變數分配預設值。

咱們接下來就來宣告一個名為total_sale的變數,資料型別為INT,預設值為0。來看下sql:

DECLARE total_sale INT DEFAULT 0;

其中,mysql允許使用單個DECLARE語句宣告共享相同資料型別的兩個或多個變數,來看個sql:

DECLARE x,y INT DEFAULT 0;

在上面的sql中,我們聲明瞭兩個整數變數x和y,並將其預設值設定為0。完事呢,既然變數設定完了,接下來就該分配值了,我們如果要為變數分配一個值,可以使用SET語句,來看個例項:

DECLARE total_count INT DEFAULT 0;
SET total_count = 10;

在上面的sql語句中,我們分配total_count變數的值為10。完事除了SET語句之外,還可以使用SELECT INTO語句將查詢的結果分配給一個變數,來看例項:

DECLARE total_products INT DEFAULT 0
 
SELECT COUNT(*) INTO total_products
FROM products

在上面的sql中,我們應當有如下理解:

  • 首先,宣告一個名為total_products的變數,並將其值初始化為0。
  • 然後,使用SELECT INTO語句來分配值給total_products變數,從資料庫中的products表中選擇的產品數量。

我們知道一個變數有自己的範圍(作用域),它用來定義它的生命週期。 但是如果在儲存過程中宣告一個變數,那麼當達到儲存過程的END語句時,它將超出範圍,因此在其它程式碼塊中無法訪問。

我們可以這麼理解,如果我們在BEGIN END塊內宣告一個變數,那麼如果達到END,它將超出範圍。 我們還可以在不同的作用域中宣告具有相同名稱的兩個或多個變數,因為變數僅在自己的作用域中有效。 但是,在不同範圍內宣告具有相同名稱的變數不是很好的程式設計習慣。其中,以@符號開頭的變數是會話變數,直到會話結束前它可用和可訪問。

更多關於MySQL相關內容感興趣的讀者可檢視本站專題:《MySQL儲存過程技巧大全》、《MySQL常用函式大彙總》、《MySQL日誌操作技巧大全》、《MySQL事務操作技巧彙總》及《MySQL資料庫鎖相關技巧彙總》

希望本文所述對大家MySQL資料庫計有所幫助。