一、存盤程序
概念:存盤程序是一組為了完成某項特定功能的SQL陳述句集, 其實質就是一段存盤在資料庫中的代碼, 它可以由宣告式的sql陳述句和程序式sql陳述句組成,
特點:
- 可增強SQL語言的功能和靈活性
- 良好的封裝性
- 高性能
- 可減少網路流量
- 可作為一種安全機制來確保資料庫的安全性和資料的完整性
用戶定義的結束符(DELIMITER )
- DELIMITER $$:
- 例句:將MySQL結束符修改為兩個感嘆號“!!” (DELIMITER !!)
使用CREATE PROCEDURE陳述句創建存盤程序:CREATE PROCEDURE sp_name([proc_parameter[,…]]) routine_body ;
proc_paramete:指定存盤程序的引數串列
routine_body:存盤程序的主體部分,也稱為存盤程序體
[IN | OUT | INOUT] param_name type:引數 名,引數型別
例如:在mysql_test中創建一個存盤程序,用于實作給定表customers中一個客戶id號即可修改表customers中該客戶的性別為一個指定的性別

使用DECLARE陳述句宣告區域變數:DECLARE var_name[,…] type [DEFAULT value]
例如:宣告一個整型區域變數cid: DECLARE cid INT(10);
使用DECLARE陳述句宣告區域變數的規范
- 1)只能在存盤程序體的BEGIN…END陳述句塊中宣告;
- 2)必須在存盤程序的開頭處宣告;
- 3)作用范圍僅限于宣告它的BEGIN…END陳述句塊;
- 4)不同于用戶變數
區域變數與用戶變數的區別:
- 1)區域變數宣告時,在其前面沒有@符號,并且它只能 被宣告它的BEGIN…END陳述句塊中的陳述句所使用;
- 2)用戶變數在宣告時,會在其名稱前面使用@符號,同 時已宣告的用戶變數存在于整個會話之中,
使用SET陳述句為區域變數賦值:SET var_name=expr[,var_name=expr]… SET cid=910;
使用SELECT…INTO陳述句把選定列的值直接存盤到區域變數中

流程控制陳述句
- 1、條件判斷陳述句 IF…THEN …ELSE陳述句 CASE陳述句 (IF 條件 THEN 運算式1 ELSE 運算式2 END IF;)
- 2、回圈陳述句 WHILE陳述句 REPEAT陳述句 LOOP陳述句
WHILE 條件 運算式 END WHILE
repeat 運算式 END repeat
loop 運算式 END loop
ITERATE陳述句 用于表示退出當前回圈
****************************游標CURSOR*****************************************
使用DECLARE CURSOR陳述句創建游標

使用OPEN陳述句打開游標:OPEN cursor_name
使用FETCH…INTO陳述句讀取資料:

使用CLOSE陳述句關閉游標 :CLOSE cursor_name
**********************存盤程序的使用************************
使用CALL陳述句呼叫存盤程序

呼叫資料庫mysql_test中的存盤程序sp_update_sex,將客戶id號為909的客戶性別修改為男性“M”
CALL sp_update_sex(909,’M’);
使用DROP PROCEDURE陳述句洗掉存盤程序
DROP PROCEDURE[IF EXISTS] sp_name
二、存盤函式
存盤函式與存盤程序一樣,是由SQL陳述句和程序式陳述句組成的代碼片段
使用CREATE FUNCTION陳述句創建存盤函式
CREATE FUNCTION sp_name([func_parameter[,…]]) RETURNS type routine_body
- sp_name:指定存盤函式的名稱
- func_parameter:指定存盤函式的引數
- RETURNS type :宣告存盤函式回傳值的資料型別; type指定回傳值的資料型別
- routine_body 指定存盤函式的主體部分,也稱為存盤函式體
在資料庫mysql_test中創建 一個存盤函式,要求該函式能根據 給定的客戶id號回傳客戶的性別, 如果資料庫中沒有給定的客戶id號 ,則回傳“沒有該客戶”,
Use mysql_test; DELIMITER $$ CREATE FUNCTION fn_search(cid INT) RETURNS CHAR(20) DETERMINISTIC BEGIN DECLARE SEX CHAR(20); SELECT cust_sex INTO SEX FROM customers WHERE cust_id=cid; IF SEX IS NULL THEN RETURN(SELECT’沒有該客戶’); ELSE IF SEX=‘F’ THEN RETURN(SELECT’女’); ELSE RETURN(SELECT ‘男’); END IF; END IF; END $$

使用關鍵字SELECT呼叫存盤函式:SELECT sp_name([func_parameter[, …]])
使用DROP FUNCTION陳述句洗掉存盤函式:DROP FUNCTION [IF EXISTS] sp_name
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/125659.html
標籤:MySQL
上一篇:MySQL索引
