mysql預存程序 in out inout

來源:互聯網
上載者:User

標籤:預存程序   沒有   mysql   刪除使用者   獨立   ofo   efi   欄位   mail   

預存程序的好處

預存程序是一組先行編譯好的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)beginselect * from user where id = userId;end //delimiter ;

注意:參數名不要和資料表中的欄位名相同,否則會出現意想不到的後果。

調用
call findUserById(1);

建立一個in 一個out參數的預存程序

刪除一個使用者並且返回剩餘使用者數量

delimiter //create procedure delUserByIdAndReturnNums(in userId int unsigned,out nums int unsigned )begindelete from user where id=userId;select count(id)  from user into nums;end //delimiter ;

調用:
call delUserByIdAndReturnNums(1,@nums);br/>調用過後我們就可以查看@nums的值了。
建立一個in多個out參數的預存程序

刪除一個使用者並返回剩餘使用者總數 和 被刪除使用者的姓名

delimiter //create procedure delUser(in userId int ,out nums int,out username varchar(20))beginselect 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)

mysql預存程序 in out inout

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.