亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql存儲過程 in out inout

發布時間:2020-06-28 06:09:07 來源:網絡 閱讀:1307 作者:梧桐深院 欄目:關系型數據庫

存儲過程的好處

存儲過程是一組預編譯好的sql語句,用來執行某個特定的功能。這樣可以省去sql解析、編譯、優化的過程,提高了執行效率,同時,在調用的時候只傳一個存儲過程的名稱,而不用傳一大堆sql語句,減少了網絡傳輸。也間接提高了執行效率。

存儲過程與自定義函數的區別

  1. 存儲過程是一組sql語句,為了實現某個獨立的功能,一般獨立執行。而自定義函數更多的作為其它sql語句的組成部分出現。
  2. 自定義函數只能有一個返回值,而存儲過程可以有多個返回值。
  3. 存儲過程功能復雜,函數針對性更強

存儲過程定義

存儲過程是sql語句和控制語句的預編譯集合,以一個名稱存儲并作為一個單元處理。

創建語法

create 
[definer = {user|current_user}]
procedure proc_name ([參數[,....]])
some body code....
參數:
[in | out | inout] 參數名 類型

in  傳入的參數
out 返回的參數
inout 傳入 改變 并且返回的參數

調用語法

call proc_name(參數);
如果沒有參數,括號可以省略;

示例

創建沒有參數的存儲過程

create procedure ver()
select version();

調用

call ver(); 或 call ver;

當然這里把一個函數放進一個存儲過程沒有什么意義。只是單純為了舉例。

創建一個in參數的存儲過程

我們經常查詢id為某值的用戶,所以我們把它寫成一個存儲過程。

delimiter //
create procedure findUserById(in userId int unsigned)
begin
select * from user where id = userId;
end //
delimiter ;

注意:參數名不要和數據表中的字段名相同,否則會出現意想不到的后果。

調用
call findUserById(1);

創建一個in 一個out參數的存儲過程

刪除一個用戶并且返回剩余用戶數量

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 ;

調用:
call delUserByIdAndReturnNums(1,@nums);調用過后我們就可以查看@nums的值了。
br/>調用過后我們就可以查看@nums的值了。

創建一個in多個out參數的存儲過程

刪除一個用戶并返回剩余用戶總數 和 被刪除用戶的姓名

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 ;

調用
call delUser(3,@nums,@username);
調用過后可以查看兩個變量的值。
select @nums;
select @username;

創建帶有inout參數的存儲過程

定義一個存儲過程,傳入一個整數得到其平方值。

delimiter // 
create procedure square(inout num int)
begin 
set num=num*num;
end //
delimiter ;

調用:
由于其參數是inout類型,所以我們需要傳入一個賦值過的變量,以便在存儲過程內部對其修改后返回。

set @num=3;
call square(@num);
select @num;

其結果如下:
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)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔西县| 河间市| 丹寨县| 鄂托克旗| 丹阳市| 松阳县| 嘉兴市| 吉木乃县| 景泰县| 芜湖县| 灌云县| 莱芜市| 北辰区| 东平县| 冕宁县| 滦平县| 桦甸市| 安徽省| 景德镇市| 普宁市| 宝鸡市| 呼图壁县| 定襄县| 抚松县| 崇礼县| 伊春市| 崇明县| 东台市| 嵊泗县| 丰县| 湘西| 舟曲县| 花莲市| 余庆县| 南部县| 庐江县| 凤城市| 甘泉县| 临沂市| 依安县| 衡东县|