1. 程式人生 > 資料庫 >MySQL資料庫儲存過程講解與例項

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