SQL存儲(chǔ)過(guò)程

存儲(chǔ)過(guò)程
什么是存儲(chǔ)過(guò)程
創(chuàng)建調(diào)用與刪除
變量聲明
參數(shù)定義
流程語(yǔ)句
查看存儲(chǔ)過(guò)程
什么是存儲(chǔ)過(guò)程
創(chuàng)建一組為了完成特定功能的SQL語(yǔ)句集
之后需要用到時(shí)就可以直接用存儲(chǔ)過(guò)程名使用
創(chuàng)建的存儲(chǔ)過(guò)程保存在數(shù)據(jù)庫(kù)的數(shù)據(jù)字典中
創(chuàng)建調(diào)用與刪除
/* 創(chuàng)建 */DELIMITER $$ CREATE PROCEDURE 名稱(chēng)()BEGIN 語(yǔ)句 END $$ DELIMITER ;/* 調(diào)用 */call 名稱(chēng)();/* 刪除 */drop pROCedure 名稱(chēng);
DELIMITER語(yǔ)句將標(biāo)準(zhǔn)分隔符 - 分號(hào)(;)更改為:$$,這樣就不會(huì)被語(yǔ)句中的分號(hào)而結(jié)束,而是等到$$ 。這樣才能保證整個(gè)存儲(chǔ)過(guò)程一起提交
創(chuàng)建完之后可以再改回到分號(hào)
變量聲明
在存儲(chǔ)過(guò)程中聲明一個(gè)變量
DECLARE 變量名 數(shù)據(jù)類(lèi)型(大小) DEFAULT 默認(rèn)值;
/* 聲明整形變量a默認(rèn)值為0 */DECLARE a INT DEFAULT 0;/* 聲明多個(gè)同類(lèi)型 */DECLARE x, y INT DEFAULT 0;
分配變量值
要為變量分配一個(gè)值,可以使用SET語(yǔ)句
SET total_count = 10 ;
使用SELECT INTO語(yǔ)句將查詢(xún)的結(jié)果賦值給一個(gè)變量
SELECT COUNT(*) INTO a FROM 表 ;
參數(shù)定義
參數(shù)的三種類(lèi)型
IN:表示調(diào)用者向過(guò)程傳入值(傳入值可以是字面量或變量)
OUT:表示過(guò)程向調(diào)用者傳出值
INOUT:INOUT參數(shù)是IN和OUT參數(shù)的組合。
delimiter $$ CREATE pROCedure name1(in x int ,OUT y int)BEGIN SET y = x+x;END$$ delimiter ;set ?@b=3;CALL name(5,@b);SELECT @b;結(jié)果為10
定義參數(shù)
create produce name(參數(shù)類(lèi)型 參數(shù)名稱(chēng) 數(shù)據(jù)類(lèi)型(大?。?
流程語(yǔ)句
IF語(yǔ)句
IF 布爾式 THEN ? 操作語(yǔ)句;END IF; ?IF 布爾式 THEN ? 操作語(yǔ)句;ELSE ? 操作語(yǔ)句;END IF;
CASE語(yǔ)句
CASE 一變量 WHEN 變量滿(mǎn)足條件1 THEN 相應(yīng)語(yǔ)句 WHEN 變量滿(mǎn)足條件2 THEN 相應(yīng)語(yǔ)句...ELSE 相應(yīng)語(yǔ)句 END CASE;
循環(huán)
WHILE 條件判斷 DO...相應(yīng)語(yǔ)句...END WHILEREPEAT...相應(yīng)語(yǔ)句...UNTIL 條件判斷 END REPEATset autocommit = 0;循環(huán)語(yǔ)句塊 commit;/* 在循環(huán)首尾加上這兩條語(yǔ)句,可以避免循環(huán)中語(yǔ)句一條一條的執(zhí)行。 從而提高效率,將循環(huán)完畢后所有要執(zhí)行的語(yǔ)句一起執(zhí)行 */
查看存儲(chǔ)過(guò)程
查看所有存儲(chǔ)過(guò)程
SHOW PROCEDURE STATUS;
查看指定數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程
SHOW PROCEDURE STATUS WHERE db = '數(shù)據(jù)庫(kù)名';
查看指定存儲(chǔ)過(guò)程源代碼
SHOW CREATE PROCEDURE 存儲(chǔ)過(guò)程名
自定義函數(shù)
CREATE FUNCTION 函數(shù)名(a int) Returns int
函數(shù)對(duì)比存儲(chǔ)過(guò)程
不能用臨時(shí)表,只能用表變量,有些函數(shù)不能用,存儲(chǔ)過(guò)程限制少
存儲(chǔ)過(guò)程處理的功能比較復(fù)雜,而函數(shù)實(shí)現(xiàn)的功能針對(duì)性強(qiáng),
存儲(chǔ)過(guò)程可以執(zhí)行修改表的操作,但是函數(shù)不能執(zhí)行一組修改全局?jǐn)?shù)據(jù)庫(kù)狀態(tài)的操作
存儲(chǔ)過(guò)程可以返回參數(shù),如記錄集,函數(shù)只能返回值或者表對(duì)象。存儲(chǔ)過(guò)程的參數(shù)有in,out,inout三種,函數(shù)只有in,存儲(chǔ)過(guò)程聲明時(shí)不需要返回類(lèi)型,而函數(shù)需要描述返回類(lèi)型,且函數(shù)中必須包含一個(gè)有效的return語(yǔ)句
存儲(chǔ)過(guò)程一般是作為獨(dú)立部分來(lái)執(zhí)行,而函數(shù)可以作為查詢(xún)語(yǔ)句的一個(gè)部分來(lái)調(diào)用,由于函數(shù)可以返回一個(gè)表對(duì)象,所以在查詢(xún)中位于from關(guān)鍵字后面,sql語(yǔ)句中不可以含有存儲(chǔ)過(guò)程
end
作者:IT那個(gè)小筆記