MySQL資料庫儲存過程講解與例項
儲存過程是資料庫的一個重要的功能,MySQL 5.0以前並不支援儲存過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0開始支援儲存過程,這樣即可以大大提高資料庫的處理速度,同時也可以提高資料庫程式設計的靈活性。
MySQL儲存過程的建立
語法
CREATE PROCEDURE 過程名([[IN|OUT|INOUT] 引數名 資料型別[,[IN|OUT|INOUT] 引數名 資料型別…]]) [特性 ...] 過程體
DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
MySQL預設以";"為分隔符,如果沒有宣告分割符,則編譯器會把儲存過程當成SQL語句進行處理,因此編譯過程會報錯,所以要事先用“DELIMITER //”聲明當前段分隔符,讓編譯器把兩個"//"之間的內容當做儲存過程的程式碼,不會執行這些程式碼;“DELIMITER ;”的意為把分隔符還原。
引數
儲存過程根據需要可能會有輸入、輸出、輸入輸出引數,如果有多個引數用","分割開。MySQL儲存過程的引數用在儲存過程的定義,共有三種引數型別,IN,OUT,INOUT:
IN引數的值必須在呼叫儲存過程時指定,在儲存過程中修改該引數的值不能被返回,為預設值OUT:該值可在儲存過程內部被改變,並可返回INOUT:呼叫時指定,並且可被改變和返回
過程體
過程體的開始與結束使用BEGIN與END進行標識。
MySQL例項與講解
1. 建立一儲存過程,求l+2+3+…+n,並列印結果。
先使用MySQL語句建立儲存過程,再使用call語句呼叫這一儲存過程檢視結果,可以看到由於未輸入n的值,sum結果為0。
DELIMITER // CREATE PROCEDURE addresult() BEGIN DECLARE i INT; DECLARE sum INT; DECLARE n INT; SET i = 1; SET sum = 0; WHILE i <= n DO SET sum = sum + i; SET i = i + 1; END WHILE; SELECT SUM; END // DELIMITER ;
在navicat 實現
2.呼叫上面的addresult儲存過程,列印l十2+3+…+10的結果。
在第一題的addresult過程基礎上,加上一條“set n=10”語句,設定n的值,呼叫該過程後列印結果,可以看到結果為sum=1+2+3+...+10=55。
3. 修改上述儲存過程為addresult1,使得n為輸入引數,其具體值由使用者呼叫此儲存過程時指定。
這是輸入10的結果
4.呼叫上面修改後的addresult1儲存過程,列印l+2+3+…+100的結果。
5. 修改上述儲存過程為addresult2,將n引數設定預設值為100,並改設sum為輸出引數,讓主程式能夠接收計算結果。
將3中儲存過程中的“in n int”修改為“out sum int”,並在儲存過程中設定n預設值為100。
更多後續參考
參考:https://blog.csdn.net/weixin_41177699/article/details/80553643?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-2.control
簡單易懂參考
https://blog.csdn.net/xushouwei/article/details/52198065