MySQL中,存儲過程的參數類型IN、OUT、INOUT,但是函數的參數只能是IN類型的。
1、IN類型
使用IN類型來傳遞信息,存儲過程內部可以對參數的值進行修改,但是修改后的值調用者不可見。
create procedure pr_demo_in(in id int) begin if (id is not null)then set id = id + 1; end if; select id as output_id; end /** 測試 **/ set @id = 1; call pr_demo_in(@id); /** 運行結果output_id = 2 **/ select @id as output_id; /** 運行結果output_id = 1 **/
可以看出雖然設置了變量id的值為1,但是在存儲過程內部修改了id的值為2,id的值並未返回給調用者。
2、OUT類型
使用OUT類型來傳遞信息,在存儲過程內部,該值的默認值為NULL,無論調用者是否傳值給存儲過程。
create procedure pr_demo_out(out id int) begin if (id is not null)then set id = id + 1; end if; select id as output_id; end /** 測試 **/ set @id = 10; call pr_demo_out(@id); /** 運行結果output_id為null **/ select @id as output_id; /** 運行結果output_id為null **/
可以看出雖然設置了變量id的值為10,但是在存儲過程內部id的值為null,最后id的值在存儲過程內修改后返回調用者。
2、INOUT類型
使用IN類型來傳遞信息,存儲過程內部可以對參數的值進行修改,並將最終值返回給調用者。
create procedure pr_demo_inout(inout id int) begin if (id is not null)then set id = id + 1; end if; select id as output_id; end /** 測試 **/ set @id = 1; call pr_demo_inout(@id); /** 運行結果output_id = 2 **/ select @id as output_id; /** 運行結果output_id = 2 **/
以看出設置了變量id的值為2,在存儲內部將id的值修改為2,最后id的值返回給調用者。