mysql存儲過程 變量和參數類型

一個簡單的存儲過程

delimiter $$
create procedure testa()
begin
   select * from p_m_table ;
end;
$$
delimiter ;

存儲過程的結構組成:

1.創建格式 :create procedure 存儲過程名

2.包含一個以上代碼塊,代碼塊在begin和end 之間 begin和end 可以嵌套使用

3.在命令行中創建需要定義提交的分隔符 delimiter $$

存儲過程的特點:

1.能完成較複雜的判斷和運算

2.可編程性強,靈活

3.SQL編程的代碼可重複使用

4.執行速度相對快一些

5.減少網絡之間數據傳輸,節省開銷

存儲過程的變量:

需求:編寫存儲過程,使用變量取user_id ='APP-2016-00494878'得用戶名 並返回

delimiter $$
create procedure testd()
begin
  declare my_uname varchar(32) default '';
  set my_uname='linkui';
  select uname into my_uname from users where user_id = '';
  select my_uname;
end;
$$
delimiter ;

特點:

1.變量的聲明使用 declare,一句declare只聲明一個變量,變量必須先聲明後使用

2.變量具有數據類型和長度,與mysql的SQL數據類型一致,因此甚至可以指定默認值、字符集 和排序規則

3.變量可以通過set賦值,也可以通過select into的方式賦值

4.變量需要返回,可以使用select語音,如:select 變量名

5.變量是有作用域的,作用範圍在begin與end直接

6.需要在多個塊直接傳遞值,可以使用全局變量,即放在所有代碼塊之前

7.傳參變量是全局的,可以在多個塊之間其作用

存儲過程的傳入參數 IN

需求:編寫存儲過程,傳入 user_id 返回改用戶的 user_name

delimiter $$
create procedure teste(IN my_user_id varchar(32))
begin
  declare user_name1 varchar(32) default '';
  select user_name into user_name1 from p_app_user where user_id = my_user_id;
  select user_name1;
end;
$$
dilimiter ;

1.傳入參數:類型爲 IN,表示該參數的值必須在調用存儲過程時指定,如果不顯示指定位IN,

那麼默認就是IN類型

2.IN類型參數一般只用於傳入,在調用存儲過程中一般不作修改和返回

3.如果調用存儲過程中需要修改和返回值,可以使用OUT類型參數

存儲過程的傳出參數 OUT

需求:調用存儲過程時,傳入 user_id 返回改用戶的user_name

delimiter $$
create procedure teste(IN my_user_id varchar(32),OUT user_name1 varchar(32))
begin
  select user_name into user_name1 from p_app_user where user_id = my_user_id;
  select user_name1;
end;
$$
dilimiter ;

調用存儲過程:

set @user_name:='';
call teste('APP-2016-00494878',@user_name);
select @user_name as user_nameAA

1.傳出參數:在調用存儲過程中,可以改變其值,並可返回

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

3.調用存儲過程時,OUT參數也需要知道,但必須是變量,不能是常量

4.如果既需要傳入,同時需要傳輸,則可以使用INOUT參數類型

存儲過程的可變參數 INOUT

需求:調用存儲過程時 ,參數user_id和user_name既是傳入,也是傳出參數

delimiter $$
create procedure teste(INOUT user_id1 varchar(32),INOUT user_name1 varchar(32))
begin
  set user_id1='APP-2016-00494878';
  set user_name1 = 'linkui';
  select user_id,user_name into user_id1,user_name1 from p_app_user where user_id = user_id1;
end;
$$
dilimiter ;

調用存儲過程:

set @user_name1:='';
set @user_id1:='';
call teste(@user_id1,@user_name1);
select @user_id1 as user_idAA,@user_name1 as user_nameAA

1.可變變量INOUT:調用時可傳入值,在調用過程中,可修改其值,同時也可返回值

2.INOUT參數集合了IN和OUT類型的參數功能

3.INOUT調用時傳入的是變量,而不是常量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章