1. 程式人生 > >3.儲存過程的引數

3.儲存過程的引數

來源:網易雲課堂《精通MySQL儲存過程、函式和觸發器》課程

講師:huangxifeng607(黃錫峰)

筆記:

(1)儲存過程的傳入引數IN

需求:編寫儲存過程,傳入uid,返回該使用者的uname

delimiter $$
create procedure testa(my_uid int)
begin
    declare my_uname varchar(32) default '';
    select uname into my_uname from users where uid=my_uid;
    select my_uname;
end;
$$
delimiter ;

1.傳入引數:型別為IN,表示該引數的值必須在呼叫儲存過程時指定,如果不顯式指定為IN,那麼預設就是IN型別

2.IN型別引數一半隻用於傳入,在呼叫儲存過程中一般不作修改和返回

3.如果呼叫儲存過程中需要修改和返回值,可以使用OUT型別引數

(2)儲存過程的傳出引數OUT

需求:呼叫儲存過程時,傳入uid返回該使用者的uname

delimiter $$
create procedure testa(IN my_uid int, OUT my_uname varchar(32))
begin
    select uname into my_uname from users where uid=my_uid;
    select my_uname;
end;
$$
delimiter ;
set @uname:='';
call testa(2, @uname);
select @uname as myunameAA;

1.傳出引數:在呼叫儲存過程中,可以改變其值,並可返回

2.OUT是傳出引數,不能用於傳入引數值

3.呼叫儲存過程時,OUT引數也需要指定,但必須是變數,不能是常量

4.如果既需要傳入,同時又需要傳出,則可以使用INOUT型別引數

(3)儲存過程的可變引數INOUT

需求:呼叫儲存過程時,引數my_uid和my_uname,既是傳入,也是傳出引數

delimiter $$
create procedure testa(INOUT my_uid int, INOUT my_uname varchar(32))
begin
    set my_uid=2;
    set my_uname='hxf3'
    select uname into my_uname from users where uid=my_uid;
    select my_uid,my_uname;
end;
$$
delimiter ;

set @uname:='';
set @uid:=0;
call testa(@uid, @uname);
select @uid as uidAA, @uname as myunameAA;
1.可變變數INOUT:呼叫時可傳入值,在呼叫過程中,可修改其值,同時也可返回值。

2.INOUT引數集合了IN和OUT型別的引數功能

3.INOUT呼叫時傳入的是變數,而不是常量

(4)小結

1.儲存過程的引數型別有:IN, OUT, INOUT

2.儲存過程各引數的使用示例