mysql儲存過程中的三種引數型別小解
mysql儲存過程語法:
mysql> delimiter // (分割符)
mysql> create procedure 方法名(引數型別引數 引數的資料型別)
-> begin(表示sql語句的開始)
-> select p_in_out as p_01; (查詢輸入引數)
-> set 引數名 = 引數值(修改引數值)
-> select p_in_out as p_02; (查詢修改後的引數值)
-> end;(sql語句的結束)
-> //
mysql> delimiter; (分割符)
引數賦值
mysql> set @設定的引數名=引數值;
檢視賦值後的所有結果
mysql> call 方法名(@賦值時的引數名);
檢視返回值
mysql> select @賦值時的引數名;
儲存過程的語法與sql語句一樣,不區分大小寫
引數型別有三類,分別為:in(輸入引數);out(輸入輸出引數);inout(輸入輸出引數)
in(輸入引數):引數值可以在儲存過程內部指定,為預設值,在儲存過程中修改該引數的值不能被返回
如:
mysql> create procedure test_in(in p_in int)
-> begin
-> select p_in as p_01;
-> set p_in=100;
-> select p_in as p_02;
-> end;
-> //
Query OK, 0 rows affected
mysql> delimiter;
mysql> set @p_in=30;
Query OK, 0 rows affected
mysql> call test_in(@p_in);
+------+
| p_01 |
+------+
| 30 |
+------+
1 row in set
+------+
| p_02 |
+------+
| 100 |
+------+
1 row in set
Query OK, 0 rows affected
mysql> select @p_in as p_03;
+------+
| p_03 |
+------+
| 30 |
+------+
1 row in set
由此可看出:p_in的值在儲存過程中的改變不影響最終結果
out(輸出引數):該值不能初始化賦值,可在儲存過程內部被改變,並可返回;
如:
mysql> delimiter //
mysql> create procedure test_out(outp_out int)
-> begin
-> select p_out as p_01;
-> set p_out=100;
-> select p_out as p_02;
-> end;
-> //
Query OK, 0 rows affected
mysql> delimiter;
mysql> set @p_out=1000;
Query OK, 0 rows affected
mysql> call test_out(@p_out);
+------+
| p_01 |
+------+
| NULL |
+------+
1 row in set
+------+
| p_02 |
+------+
| 100 |
+------+
1 row in set
Query OK, 0 rows affected
mysql> select @p_out as p_03;
+------+
| p_03 |
+------+
| 100 |
+------+
1 row in set
由此可看出:p_out的初始化賦值沒有返回,最終返回的結果是儲存過程中引數值的修改
inout(輸入輸出引數):呼叫時指定,可被改變和返回
如:
mysql> delimiter //
mysql> create procedure test_inout(inoutp_inout int)
-> begin
-> select p_inout as p_01;
-> set p_inout=20;
-> select p_inout as p_02;
-> end;
-> //
Query OK, 0 rows affected
mysql> delimiter;
mysql> set @p=10000;
Query OK, 0 rows affected
mysql> call test_inout(@p);
+-------+
| p_01 |
+-------+
| 10000 |
+-------+
1 row in set
+------+
| p_02 |
+------+
| 20 |
+------+
1 row in set
Query OK, 0 rows affected
mysql> select @p as p_03;
+------+
| p_03 |
+------+
| 20 |
+------+
1 row in set
由此可看出:p_inout的初始化引數賦值和儲存過程中的修改引數值均被執行並返回,最終的返回結果是儲存過程的修改值