《Mysql儲存過程程式設計》之初始mysql儲存過程

2021-08-09 14:38:23 字數 4390 閱讀 3069

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...