什麼是存儲過程 1. 一組可編程的函數,是為了完成特定功能的SQL語句集 經編譯創建並保存在資料庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行。 2. 存儲過程就是具有名字的一段代碼,用來完成一個特定的功能。 3. 創建的存儲過程保存在資料庫的數據字典中 為什麼要用存儲過程 1. ...
什麼是存儲過程
- 一組可編程的函數,是為了完成特定功能的SQL語句集
經編譯創建並保存在資料庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行。 - 存儲過程就是具有名字的一段代碼,用來完成一個特定的功能。
- 創建的存儲過程保存在資料庫的數據字典中
為什麼要用存儲過程
- 將重覆性很高的一些操作,封裝到一個存儲過程中,簡化了對這些SQL的調用
- 批量處理
- 統一介面,確保數據的安全
- 相對於oracle資料庫來說,MySQL的存儲過程相對功能較弱,使用較少。
存儲過程的創建和調用
創建存儲過程
CREATE PROCEDURE 名稱()
BEGIN
語句
END $$
調用存儲過程
call 名稱();
刪除存儲過程
drop procedure 名稱
存儲過程變數
- 在存儲過程中聲明一個變數
- 使用DECLARE語句
DECLARE 變數名 數據類型(大小) DEFAULT 預設值;
可以聲明一個名為total_sale的變數,數據類型為INT,預設值為0
DECLARE total_sale INT DEFAULT 0;
- 分配變數值
要為變數分配一個值,可以使用SET語句
SET total_count = 10;
使用SELECT INTO語句將查詢的結果分配給一個變數
SELECT COUNT(*) INTO total_products FROM products
- 變數的範圍
如果在存儲過程中聲明一個變數,那麼當達到存儲過程的END語句時,它將超出範圍,因此在其它代碼塊中無法訪問
存儲過程參數
三種類型
-
IN:表示調用者向過程傳入值(傳入值可以是字面量或變數)
-
OUT:表示過程向調用者傳出值
-
INOUT:INOUT參數是IN和OUT參數的組合。
定義參數:create produce name(模式,參數名稱 數據類型(大小))
存儲過程語句
- IF語句
IF expression THEN
statements;
END IF;
##################
IF expression THEN
statements;
ELSE
else-statements;
END IF;
- CASE語句
CASE case_expression
WHEN when_expression_1 THEN commands
WHEN when_expression_2 THEN commands
...
ELSE commands
END CASE;
- 迴圈
WHILE expression DO
statements
END WHILE
#############
REPEAT
statements;
UNTIL expression
END REPEAT
查看存儲過程
查看所有存儲過程:
SHOW PROCEDURE STATUS;
查看指定資料庫中的存儲過程
SHOW PROCEDURE STATUS WHERE db = 'My_test4';
查看指定存儲過程源代碼
SHOW CREATE PROCEDURE 存儲過程名