json code 12
3456
78910
1112
1314
1516
171、什麼是儲存過程?
過程就是把若干條sql組合起來並起乙個名字即沒有返回值的函式(通過其他方式返回)
把過程儲存在資料庫中就是儲存過程
2、第乙個儲存過程,建立簡單儲存過程語法
create procedure procedurename()
begin
--sql
endcreate procedure p1()
begin
select concat('aa','bb');
end$
3、呼叫儲存過程
call procedurename();
簡單儲存過程的基本語法
json code 12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
3132
3334
3536
3738
3940
4142
4344
4546
4748
4950
5152
5354
5556
5758
5960
6162
6364
6566
6768
6970
7172
7374
7576
7778
7980
8182
8384
8586
create procedure procedurename()
begin
-- 通過在begin和end之間寫sql並批量執行,begin和end是固定的寫法
--通過declare關鍵字定義變數,下面語句的含義是定義了乙個叫age的整型變數預設值是18
declare age int default 18;
declare height int default 180;
select ('年齡是',age,'身高是',height);
endcreate procedure p2()
begin
declare age int default 11;
select concat('年齡是',age);
end--set關鍵字的用法是給定義的變數賦值
create procedure p3()
begin
-- 下面的含義 定義乙個叫age的變數,並給其加上10,並在控制台顯示出來
declare age int default 15;
set age := age+10;
select concat('10年後的年齡是',age);
end$
--邏輯判斷之if-else分支結構
create procedure procedurename()
begin
declare age int default 18;
if age >= 18 then
select concat('已成年','');
else
select concat('未成年','');
end if;
end--邏輯判斷之if-elseif-else分支結構,and表示邏輯與 or表示邏輯或
create procedure p5()
begin
declare v int default 49;
if v >0 and v <= 10
then
select '0
10';
elseif v > 10 and v <= 50
then
select '10
< v <=50';
else
select 'v > 50';
end if;
end $
--邏輯判斷之case-when-then-else分支結構
create procedure px24()
begin
declare randnum int default 0;
set randnum := floor(rand()*5);
case randnum
when 1 then select '1' as result;
when 2 then select '2' as result;
when 3 then select '3' as result;
else
select 'i dont konw';
end case;
end$$
--迴圈之while迴圈結構舉例,以while開頭 end while結束
create procedure px16()
begin
declare sum int default 0;
declare i int default 1;
-- 每次迴圈一次對i+1,知道i<=100不滿足為止
while i<=100 do
set sum := sum+i;
set i := i+1;
end while;
select concat('1+...+100=',sum);
end$$
--迴圈之repeat迴圈結構舉例,知道滿足util之後條件後結束
create procedure p11()
begin
declare i int default 2;
repeat
select concat('i=',i);
set i := i-1;
until i <= 0 end repeat ;
end$
具有引數的儲存過程
json code 12
3456
78910
1112
1314
1516
1718
1920
2122
2324
2526
2728
2930
3132
3334
3536
3738
3940
4142
43--最簡單的具有引數輸入功能的儲存過程舉例1
create procedure px15_area(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$$
--最簡單的具有引數輸入功能的儲存過程舉例2
create procedure px17(count int)
begin
declare sum int default 0;
declare i int default 1;
while i <= count do
set sum := sum + i;
set i := i+1;
end while;
select concat('1+...+n=',sum);
end$$
--mysql儲存過程型別引數的分類 in/out/inout
--in型別的引數是外界呼叫儲存過程時傳入的具體的值(預設就是in型別)
--out型別的引數是儲存過程經過計算後把結果返回給這種型別的變數,類似於函式的返回值
--inout型別的引數是具有初始值的變數,儲存過程可以改變這個變數
create procedure px18(out age int)
begin
set age := 0;
set age := age+10;
end$$
call px18(@age_10)$$
create procedure px19(inout age int)
begin
set age := age + 30;
end$$
set @age = 19;
call px19(@age)$$
mysql儲存過程之迴圈
1.客戶端建立乙個儲存過程,過程名稱為insert corp loop 2.填寫內容 delimiter drop procedure if exists insert corp loop create definer procedure insert corp loop in loop time ...
mysql儲存過程之case語句
儲存程式的 case 語句實現乙個複雜的條件構造。如果 search condition 求值為真,相應的 sql被執行。如果沒有搜尋條件匹配,在 else 子句裡的語句被執行。語法 case case value when when value then statement list when w...
mysql儲存過程之問題總結
1 mysql的引數賦值語句必須是只能夠選出一行,select username,nickname into ausername,anickname from userbase where userid userid limit 1 這樣的語句必須要加上limit 1才行。2 使用select in...