-- 創建存儲過程createprocedure mypro(in a int,in b int,out sum int)beginset sum = a+b;end;
運行結果如下:
調用存儲過程,代碼如下所示:
call mypro(1,2,@s);-- 調用存儲過程select@s;-- 顯示過程輸出結果
運行結果如下:
存儲過程語法解析 create procedure 用來創建過程; mypro 用來定義過程名稱; (in a int,in b int,out sum int)表示過程的參數,其中 in 表示輸入參數,out 表示輸出參數。類似于 Java 定義方法時的形參和返回值; begin 與 end 表示過程主體的開始和結束,相當于 Java 定義方法的一對大括號; call 用來調用過程,@s 是用來接收過程輸出參數的變量。 存儲過程的參數 IN 輸入參數:表示調用者向過程傳入值(傳入值可以是字面量或變量); OUT 輸出參數:表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變量); INOUT 輸入輸出參數:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變量); 聲明變量
declare 用于聲明變量; variable_name 表示變量名稱; datatype 為 MySQL 的數據類型; default 用于聲明默認值; 例如:declare name varchar(20) default ‘jack’。 變量賦值
SET 變量名 = 表達式值 [,variable_name = expression ...]
在存儲過程中使用變量,代碼如下所示:
use schooldb;-- 使用 schooldb 數據庫-- 創建過程createprocedure mypro1()begindeclare name varchar(20);set name ='丘處機';select*from studentinfo where studentname = name;end;-- 調用過程call mypro1();
運行結果如下:
流程控制語句
if 條件語句 IF 語句包含多個條件判斷,根據結果為 TRUE、FALSE 執行語句,與編程語言中的 if、else if、else 語法類似。 定義存儲過程,輸入一個整數,使用 if 語句判斷是正數還是負數,代碼如下所示:
-- 創建過程createprocedure mypro4(in num int)begincase num -- 條件開始when1thenselect'數值是 1';when2thenselect'數值是 2';elseselect'不是 1 也不是 2';endcase;-- 條件結束end;-- 調用過程call mypro4(3);
運行結果如下:
3、 while 循環語句 定義存儲過程,使用 while 循環輸出 1 到 10 的累加和,代碼如下所示:
-- 創建過程createprocedure mypro5(out sum int)begindeclare num intdefault0;set sum =0;while num<10do-- 循環開始set num = num+1;set sum = sum+num;endwhile;-- 循環結束end;-- 調用過程call mypro5(@sum);-- 查詢變量值select@sum;
-- 創建過程createprocedure mypro6(out sum int)begindeclare num intdefault0;set sum =0;repeat-- 循環開始set num = num+1;set sum = sum+num;
until num>=10endrepeat;-- 循環結束end;-- 調用過程call mypro6(@sum);-- 查詢變量值select@sum;
-- 創建過程createprocedure mypro7(out sum int)begindeclare num intdefault0;set sum =0;
loop_sum:loop-- 循環開始set num = num+1;set sum = sum+num;if num>=10thenleave loop_sum;endif;endloop loop_sum;-- 循環結束end;-- 調用過程call mypro7(@sum);-- 查詢變量值select@sum;
存儲過程的管理
-- 顯示存儲過程SHOWPROCEDURESTATUS;-- 顯示特定數據庫的存儲過程,代碼如下所示SHOWPROCEDUREstatuswhere db ='schooldb';-- :顯示特定模式的存儲過程,要求顯示名稱中包含“my”的存儲過程,代碼如下所示SHOWPROCEDUREstatuswhere name like'%my%';-- 顯示存儲過程源碼SHOWCREATEPROCEDURE mypro1;-- 刪除存儲過程dropPROCEDURE mypro1;