標籤:style blog color ar 使用 sp div log bs
下面是一個MySQL預存程序的簡單例子, 目的是返回最新插入的一條記錄的id值。
demiliter | drop procedure if exists addUser | create procedure addUser(in pname varchar(40),in birthday date,out pid int) begin insert into user(name,birthday) values (pname,birthday); select last_insert_id into pid; end | demilter;
MySQL中執行一條語句的依據是分號(";"),碰到了”;“則會將之前的輸入作為一條語句來執行。 demiliter |會將判斷的依據由”;“換成”|“,碰到”|“認為是一條語句的結束。如果不進行轉換,遇到”;“將之前的執行則一定會出錯。
上面的例子現用 demiliter |會將判斷的依據由”;“換成”|“,最後再用demiliter ;會將判斷的依據由”|“換成”;“。
建立預存程序的文法是 create procedure名稱(輸入/輸出,參數名,參數類型),對應於例子中的 create procedure addUser(in pname varchar(40),in birthday date,out pid int)。
begin和end之間的就是預存程序要完成的功能。
create procedure的參數類型有in,out,inout三種。
in和out,inout的不同點:修改的結果將不能返回,可以看下面的例子。
demiliter // drop procedure if exists in_paramter_test// create procedure in_paramter_test(in p_in int) begin select p_in ; set p_in =2; select p_in ; end // demilter;
設定臨時變數:mysql > set @p_in = 1;
mysql >call in_paramter_test(@p_in);
+--------+
| p_in |
+--------+
| 1 |
+--------+
+--------+
| p_in |
+--------+
| 2 |
+--------+
mysql >select @p_in;
+--------+
| p_in |
+--------+
| 1 |
+--------+
使用out的例子:
demiliter // drop procedure if exists out_paramter_test// create procedure out_paramter_test(out p_out int) begin select p_out ; set p_in =2; select p_out ; end // demilter;
執行和in相同的操作,結果都是2.
@使用者變數,串連參數。
MySQL預存程序