MySQL 儲存過程入門

2022-03-21 18:13:01 字數 3386 閱讀 2167

儲存過程是帶有邏輯的sql語句,優點是執行效率高。缺點是可移植性差

1、儲存過程語法

delimiter $  --

宣告結束符

create

procedure pro_test() --

建立儲存過程  儲存過程名稱(引數列表)

begin

select

*from employee --

可以寫多條sql語句  sql語句+流程控制

end $ --結束

2、呼叫儲存過程

call pro_test  --call 儲存過程名稱

3、儲存過程引數

in            表示輸入引數

out         表示輸出引數

inout     表示輸入、輸出引數

3.1帶有輸入引數的儲存過程

需求:通過傳入乙個員工的id,查詢員工資訊

delimiter $

create

procedure pro_findbyid(in eid int) --

in: 輸入引數

begin

select

*from employee where id =

eid;

end $

呼叫

call pro_findbyid(2);

3.2 帶有輸出引數的儲存過程

delimiter $

create

procedure pro_testout (out str

varchar(20

))begin

setstr

="這是乙個輸出引數";

end $

呼叫帶返回引數的儲存過程

先介紹下mysql變數

1、全域性變數(內建變數)

檢視所有全域性變數 show variables

檢視跟字符集有關的全域性變數 show variables like 'character_%';

檢視某個全域性變數 select @@變數名

修改全域性變數 set 變數名=新值

常用全域性變數

--character_set_client : mysql伺服器能夠接收資料的編碼

--character_set_results : mysql伺服器輸出資料的編碼

2、會話變數:只存在於當前的客戶端與資料庫伺服器端的一次連線當中,如果連線斷開,會話丟失

定義乙個會話變數 set @變數=值

檢視會話變數 select @變數

3、區域性變數:在儲存過程中使用的變數 就是儲存變數,只儲存過程執行完畢,那麼區域性變數就會消失。

變數介紹完,現在說明如何呼叫帶輸出引數的儲存過程

1、定義乙個會話變數

call pro_testout(@name) //1)定義乙個會話變數name,2)使用name會話變數

2、檢視會話變數

select @name;

3.3帶有輸入輸出引數的儲存過程

delimiter $

create

procedure pro_testinout(inout n int) --

inout輸入輸出引數

begin

select n; --

作為輸入引數傳入儲存過程, 該變數變為區域性變數 不用加'@',但在儲存過程外仍然是會話變數

set n =

500;

end$

--呼叫

輸入set@n=

10;

call pro_testinout(

@n); --

結果輸出10

輸入select

@n; --

結果輸出500

4、帶有條件判斷的儲存過程

需求:輸入乙個整數。如果為1,則返回「星期一」,如果是2,則返回「星期二」,如果是3,則返回「星期三」。如果 是其他數值,返回「錯誤的數值」

delimiter $

create

procedure pro_testif(in num int, out str

varchar(10

))begin

if num =

1then

setstr

="星期一";

elseif num =2

then

setstr

="星期二";

elseif num =3

then

setstr

="星期三";

else set str = "輸入的值不在指定範圍內";

endif

;end$--

呼叫call pro_testif(1, @str

);select

@str;

5、帶有迴圈功能的儲存過程

--需求:輸入乙個整數,求和。例如輸入100.求1-100的和

delimiter $

create

procedure pro_testwhile(in num int, out result int

)begin

--定義乙個區域性變數

declare i int

default1;

declare vsum int

default0;

while i<=n

umdo

set vsum = vsum +

i;

set i = i+1;

endwhile

;

set result =

vsum;

end$

--呼叫

call pro_testwhile(100, @result

);select

@result;

6、使用查詢結果作為返回值

delimiter $

create

procedure pro_findbyid(in eid int, out vnaem varchar(20

))begin

select empname into vname from employee where id =

eid;

end$

--呼叫

call pro_findbyid(1, @name

);select

@name

7、刪除儲存過程

drop

procedure 儲存過程名稱

MySQL儲存過程入門

在本教程中,我們將逐步介紹如何使用create procedure語句開發第乙個mysql儲存過程。另外,我們將向您展示如何從sql語句呼叫儲存過程。大多數用於mysql的gui工具允許您通過直觀的介面建立新的儲存過程。我們就先簡單介紹一下 工具中如何建立儲存過程。首先,單擊右鍵 函式 選擇如圖 新...

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