過程:封裝了若幹條語句,調用時,這些封裝體執行 函數:是一個由返回值的’過程‘ 過程是沒有返回值的函數 我們把若幹條sql封裝起來,起個名字 過程 把此過程存儲在資料庫中 存儲過程 存儲過程的額創建語法: create procedure procedureName() begin sql語句; e ...
過程:封裝了若幹條語句,調用時,這些封裝體執行
函數:是一個由返回值的’過程‘
過程是沒有返回值的函數
我們把若幹條sql封裝起來,起個名字---過程
把此過程存儲在資料庫中------存儲過程
存儲過程的額創建語法:
create procedure procedureName()
begin
-----sql語句;
end$
我們創建一個簡單的存儲過程:
create procedure p1() begin select 2+3 end$
調用存儲過程:
call p1()$
存儲過程是可以編程的,意味著可以使用變數,表達式,控制結構來完成複雜的功能
在存儲過程中,用declare聲明變數
格式:declare 變數名 變數類型[default 預設值]
create procedure p2() begin declare age int default 18; declare height int default 180; select concat('年齡是',age,'身高是',height); end$
我們調用這個p2存儲過程看看:
存儲過程中,變數可以進行sql語句中的合法運算,如+-*/
註意的是,運算的結果如何賦值給變數:
set 變數名 := expression
create procedure p3() begin declare age int default 18; set age :=age+20; select concat('20年後年齡是',age); end$
if/else 控制:
create procedure p4() begin declare age int default 18; if age>=18 then select '已成年'; else select '未成年'; end if; end$
可以看到我們的存儲過程沒有傳參數,接下來我們就建立一個可以傳參的存儲過程:
傳參的語法 [in/out/inout] 參數名 參數類型
create procedure p5(width int, height int) begin select concat('你的面積是',width*height)as area; if width>height then select '你挺胖'; elseif width<height then select '你挺瘦'; else select '你挺方'; end if; end$
我們給裡面傳入參數(3,4):
我們都知道控制結構有三大類:順序,選擇和迴圈
我們現在來寫一個帶有迴圈控制結構的存儲過程:
create procedure p6() begin declare total int default 0; declare num int default 0; while num<100 do set num:=num+1; set total:=total+num; end while; select total; end$
上面的是我們輸出1到100的和,接下來我們在p6的基礎上稍作改進寫一個p7:輸入一個參數N,得到1到N的和:
create procedure p7(in N int) begin declare total int default 0; declare num int default 0; while num<N do set num:=num+1; set total:=total+num; end while; select total; end$
in 表示我們是輸入參數
我們接下來看輸出參數:
create procedure p8(in n int,out total int) begin declare num int default 0; set total:=0; while num<n do set num:=num+1; set total:=total+num; end while; end$
其實out就是往外面輸出參數,我們給個變數來接受它。
我們在看一下inout型參數:
create procedure p9(inout age int) begin set age:=age+20; end$
在這裡我們要先聲明一個變數,然後調用存儲過程,然後再輸出它