一、存儲過程 1、定義:一組可編程的函數,是為了完成特定功能的SQL語句集,經編譯創建並保存在資料庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行 2、優點:①將重覆性很高的一些操作,封裝到一個存儲過程中,簡化了對這些SQL的調用 ②批量處理:SQL+迴圈,減少流量,也就是“跑批” ...
一、存儲過程
1、定義:一組可編程的函數,是為了完成特定功能的SQL語句集,經編譯創建並保存在資料庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行
2、優點:①將重覆性很高的一些操作,封裝到一個存儲過程中,簡化了對這些SQL的調用
②批量處理:SQL+迴圈,減少流量,也就是“跑批”
③統一介面,確保數據的安全
3、>存儲過程就是具有名字的一段代碼,用來完成一個特定的功能。
>創建的存儲過程保存在資料庫的數據字典中。
4、基本創建格式
1 delimiter// -- 將SQL語句的結束標記設置為// 2 DROP PROCEDURE IF EXISTS testprint; -- 如果存在該名字的存儲過程則刪除 3 CREATE PROCEDURE testprint() -- 創建一個名字為testprint的存儲過程, -- 括弧裡面可以傳參數:CREATE PROCEDURE mytest(in sid INT,in suid INT) 4 BEGIN -- 代碼部分開始 5 SELECT '你好,成都' as infos; -- 存儲過程的代碼部分 6 END; -- 代碼部分結束 7 // -- 結束標記 8 delimiter; -- 編寫編譯結束後將SQL語句的結束標記還原
5、調用
-- 調用無參存儲過程 CALL testprint(); -- 調用有參數的存儲過程 set @stuid = 1; SET @subid = 1; CALL mytest(@stuid,@subid);
6、存儲過程的參數
存儲過程可以有0個或多個參數,用於存儲過程的定義。
3種參數類型:
IN輸入參數:表示調用者向過程傳入值(傳入值可以是字面量或變數)
OUT輸出參數:表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變數)
INOUT輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變數)
建議:>輸入值使用in參數;
>返回值使用out參數;
>inout參數就儘量的少用。
例子:
1)、傳入學生和科目id ,得到該學生該科目的成績
1 delimiter $$ 2 DROP PROCEDURE IF EXISTS mytest; 3 CREATE PROCEDURE mytest(in sid INT,in suid INT) 4 BEGIN 5 UPDATE score SET score.scscore=scscore+5 6 WHERE score.sid = sid AND score.suid = suid; 7 END; 8 $$ 9 delimiter; 10 11 set @stuid = 1; 12 SET @subid = 1; 13 CALL mytest(@stuid,@subid);
2)、-- 傳入學生序號,獲取顯示該學生的姓名
1 delimiter $$ 2 DROP PROCEDURE IF EXISTS getstuname; 3 CREATE PROCEDURE getstuname(in sid INT,out stuname VARCHAR(100)) 4 BEGIN 5 SELECT student.sname into stuname FROM student WHERE student.sid = sid; 6 END; 7 $$ 8 delimiter; 9 10 set @stuid = 2; 11 CALL getstuname(@stuid,@stuname); 12 SELECT @stuid as sid,@stuname AS stuname;