您好,登錄后才能下訂單哦!
存儲過程是一組預(yù)編譯好的sql語句,用來執(zhí)行某個特定的功能。這樣可以省去sql解析、編譯、優(yōu)化的過程,提高了執(zhí)行效率,同時,在調(diào)用的時候只傳一個存儲過程的名稱,而不用傳一大堆sql語句,減少了網(wǎng)絡(luò)傳輸。也間接提高了執(zhí)行效率。
存儲過程是sql語句和控制語句的預(yù)編譯集合,以一個名稱存儲并作為一個單元處理。
create
[definer = {user|current_user}]
procedure proc_name ([參數(shù)[,....]])
some body code....
參數(shù):
[in | out | inout] 參數(shù)名 類型
in 傳入的參數(shù)
out 返回的參數(shù)
inout 傳入 改變 并且返回的參數(shù)
call proc_name(參數(shù));
如果沒有參數(shù),括號可以省略;
create procedure ver()
select version();
調(diào)用
call ver(); 或 call ver;
當然這里把一個函數(shù)放進一個存儲過程沒有什么意義。只是單純?yōu)榱伺e例。
我們經(jīng)常查詢id為某值的用戶,所以我們把它寫成一個存儲過程。
delimiter //
create procedure findUserById(in userId int unsigned)
begin
select * from user where id = userId;
end //
delimiter ;
注意:參數(shù)名不要和數(shù)據(jù)表中的字段名相同,否則會出現(xiàn)意想不到的后果。
調(diào)用
call findUserById(1);
刪除一個用戶并且返回剩余用戶數(shù)量
delimiter //
create procedure delUserByIdAndReturnNums(in userId int unsigned,out nums int unsigned )
begin
delete from user where id=userId;
select count(id) from user into nums;
end //
delimiter ;
調(diào)用:
call delUserByIdAndReturnNums(1,@nums);調(diào)用過后我們就可以查看@nums的值了。
br/>調(diào)用過后我們就可以查看@nums的值了。
刪除一個用戶并返回剩余用戶總數(shù) 和 被刪除用戶的姓名
delimiter //
create procedure delUser(in userId int ,out nums int,out username varchar(20))
begin
select name from user where id = userId into username;
delete from user where id = userId;
select count(id) from user into nums;
end //
delimiter ;
調(diào)用
call delUser(3,@nums,@username);
調(diào)用過后可以查看兩個變量的值。
select @nums;
select @username;
定義一個存儲過程,傳入一個整數(shù)得到其平方值。
delimiter //
create procedure square(inout num int)
begin
set num=num*num;
end //
delimiter ;
調(diào)用:
由于其參數(shù)是inout類型,所以我們需要傳入一個賦值過的變量,以便在存儲過程內(nèi)部對其修改后返回。
set @num=3;
call square(@num);
select @num;
其結(jié)果如下:
mysql> set @num=3;
Query OK, 0 rows affected (0.00 sec)
mysql> call square(@num);
Query OK, 0 rows affected (0.02 sec)
mysql> select @num;
+------+
| @num |
+------+
| 9 |
+------+
1 row in set (0.00 sec)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。