儲存過程是帶有邏輯的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、刪除儲存過程
dropprocedure 儲存過程名稱
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...