Mysql儲存過程實戰

2021-08-23 14:29:09 字數 3653 閱讀 6913

1.實戰案例一

1.1 背景

有teacher表,建表語句如下:

create

table teacher

(id int(4

)primary

keynot

null

unique

auto_increment

,num int(10

)not

null

unique

,name varchar(20

)not

null

,*** varchar(4

)not

null

,birthday datetime

,address varchar(50

));

其插入資料的值如下:

insert

into teacher values(1

,1001

,'spark'

,'m'

,'1984-11-08'

,'上海長寧'),

(2,1002

,'hadoop'

,'w'

,'1994-11-28'

,'北京昌平'),

(3,1003

,'hive'

,'m'

,'1978-12-08'

,'北京海淀'),

(4,1004

,'hbase'

,'w'

,'1990-01-08'

,'上海靜安'

);

1.2有如下需求

建立儲存過程teacher_info。要求:

teacher_info有三個引數。輸入引數為teacher_idtype,輸出引數為info。儲存過程的作用是根據編號teacher_id來查詢teacher表中的記錄。如果type為1,將姓名那麼傳給輸出引數info;如果type的值為2,將年齡傳給輸出引數info;如果type值為其它值,則返回字串error。

儲存過程如下:

delimiter

//create

procedure teacher_info(

in teacher_id int,in

type

int,

out info varchar(20

))begin

case

type

when

1then

select name into info from teacher where id = teacher_id;

when

2then

select

year

(now()

)-year

(birthday)

into info from teacher where id = teacher_id;

else

select

'error'

into info;

endcase

;end

//delimiter

;show

create

procedure

;

在mysql 命令列執行如下命令:

mysql>

delimiter

//mysql>

create

procedure teacher_info(

in teacher_id int,in

type

int,

out info varchar(20

))->

begin

->

case

type

->

when

1then

->

select name into info from teacher where id = teacher_id;

->

when

2then

->

select

year

(now()

)-year

(birthday)

into info from teacher where id = teacher_id;

->

else

->

select

'error'

into info;

->

endcase;-

>

end//

query ok,

0rows affected (

0.07 sec)

mysql>

delimiter

;

mysql>

call teacher_info(2,

1,@info);

query ok,

1row affected (

0.04 sec)

mysql>

select

@info;+

--------+

|@info|+

--------+

| hadoop |

+--------+

1row

inset

(0.00 sec)

2.實戰案例二

2.1 **

drop

procedure

ifexists

text

;delimiter

//

create

procedure

text

(out rtn int

)begin

declare loginid int

default0;

#mysql中的declare語句是在復合語句中宣告變數的指令

set rtn=1;

if loginid =

3then

set rtn=2;

elseif loginid =

0then

set rtn=3;

else

set rtn=4;

endif

;end

//delimiter

;

2.2 執行結果
mysql>

call

text

(@rtn);

#呼叫儲存過程

query ok,

0rows affected (

0.00 sec)

mysql>

select

@rtn

;#選擇結果

+------+

|@rtn|+

------+|3

|+------+

1row

inset

(0.01 sec)

3.總結

儲存過程的優點:

mysql儲存過程 MySQL儲存過程

在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...

mysql 儲存過程 mysql 儲存過程

建立 為建立儲存過程的結束標誌,使用delimiter 可更改標誌 格式create procedure begin sqlend create procedure myprocedure in param integer begin select from tb role where tb rol...

mysql 儲存過程 MySQL儲存過程

目錄 儲存過程 簡介是一組為了完成特定功能的sql語句集合 比傳統sql速度更快 執行效率更高 儲存過程的優點 執行一次後,會將生成的二進位制 駐留緩衝區,提高執行效率 sql語句加上控制語句的集合,靈活性高 在伺服器端儲存,客戶端呼叫時,降低網路負載 可多次重複被呼叫,可隨時修改,不影響客戶端呼叫...