欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL存儲過程的傳參和流程控制示例講解

 更新時間:2023年02月10日 14:32:47   作者:陽862  
這篇文章主要介紹了MySQL存儲過程的傳參和流程控制示例講解,?repeat和Loop區(qū)別是repeat有自己退出循環(huán)的語句until,Loop使用的是if判斷語句,本文結合示例代碼詳細講解,需要的朋友可以參考下

一.存儲過程傳參—in

in表示傳入的參數(shù),可以傳入數(shù)值或者變量,即使傳入變量,并不會更改變量的值,可以內部更改,僅僅作用在函數(shù)范圍內。

 演示

use test_procedure;
-- 傳入?yún)?shù)in
-- 封裝有參數(shù)的存儲過程,傳入員工編號,查找員工信息
delimiter $$
create procedure proc6(in in_empno int)
begin
	select * from emp where emp.empno =in_empno;
end $$
delimiter ;
 
call proc6(1001);
 
 
-- 封裝有參數(shù)的存儲過程,可以通過傳入部門名和薪資,查詢指定部門,并且薪資大于指定值的員工信息
delimiter $$
create procedure proc7(in in_dname char(50),in in_sal int)
begin
	select  * from dept,emp where dept.deptno =emp.deptno and (dept.dname=in_dname) and (in_sal<emp.sal);
end $$
delimiter ;
 
call proc7('學工部',20000);

二.存儲過程傳參—out

out表示從存儲過程內部傳值給調用者

 演示

-- 封裝有參數(shù)的存儲過程,傳入員工編號,返回員工名字
delimiter $$
create procedure proc8(in in_empno int,out out_ename varchar(50))
begin
	select   ename into out_ename  from emp where emp.empno =in_empno;
end $$
delimiter ;
 
call proc8(1001,@o_ename);-- 執(zhí)行這一句不會輸出
select @o_ename;

-- 封裝有參數(shù)的存儲過程,傳入員工編號,返回員工名字和薪資
delimiter $$
create procedure proc9(in in_empno int,out out_ename varchar(50),out out_sal int)
begin
	select  emp.ename,emp.sal  into out_ename,out_sal from emp where emp.empno =in_empno;
end $$
delimiter ;
 
call proc9(1001,@o_ename,@o_sal);
select @o_ename,@o_sal;

 三.存儲過程傳參—inout

inout表示從外部傳入的參數(shù)經(jīng)過修改后可以返回的變量,既可以使用傳入變量的值也可以修改變量的值(即使函數(shù)執(zhí)行完)

 演示

-- 傳入一個數(shù)字,傳出這個數(shù)字的10倍值
delimiter $$
create procedure proc10(inout num int)
begin
	set num=num*10;
end $$
delimiter ;
 
set @inout_num=10;
call proc10(@inout_num);-- inou不可以直接傳入實參
select @inout_num;

-- 傳入員工名,拼接部門號,傳入薪資,求出年薪
-- 關羽----> 30_關羽
delimiter $$
create procedure proc11(inout inout_ename varchar(50),inout inout_sal int)
begin
	select  concat_ws('_',emp.deptno,emp.ename)  into inout_ename
	from emp
	where emp.ename =inout_ename;
	set inout_sal=inout_sal*12;
end $$
delimiter ;
 
set @ino_ename='關羽';
set @ino_sal=20000;
call proc11(@ino_ename,@ino_sal);
select @ino_ename,@ino_sal;

 四.流程控制—判斷

格式

IF語句包含多個條件判斷,根據(jù)結果為TRUE、FALSE執(zhí)行語句,與編程語言中的if、else if、else語法類似,其語法格式如下:

 演示

delimiter $$
create procedure proc12(in in_score int)
begin
	
	if in_score<60
		then select '不及格';
	elseif in_score<=80
		then select '及格';
	elseif in_score<=90
		then select '良好';
	elseif in_score<=100
		then select '優(yōu)秀';
	else  
		 select '成績錯誤';
	end if;
end $$
delimiter ;
 
call proc12(77);
-- 輸入員工的名字,判斷工資的情況。
/*
sal < 10000:試用薪資
sal >= 10000 and sal < 20000轉正薪資
sal >= 20000 :元老薪資
*/
delimiter $$
create procedure proc13(in in_ename varchar(50))
begin
	declare de_sal decimal(7,2);
	declare de_result varchar(50);
	select emp.sal into de_sal from emp where emp.ename =in_ename;
	if de_sal<10000
		then set de_result='試用薪資';
	elseif de_sal<20000
		then set de_result='轉正薪資';
	else
		 set de_result='元老薪資';
	end if;
	select de_sal;
end $$
delimiter ;
 
call proc13('關羽');
 
 
 
-- 這里用用戶變量處理,就不需要先定義
delimiter $$
create procedure proc14(in in_ename varchar(50))
begin
	declare de_sal decimal(7,2);
 
	select emp.sal into @de_sal from emp where emp.ename =in_ename;
	if @de_sal<10000
		then set @de_result='試用薪資';
	elseif @de_sal<20000
		then set @de_result='轉正薪資';
	else
		 set @de_result='元老薪資';
	end if;
 
end $$
delimiter ;
 
call proc14('關羽');
select @de_sal;
 
 
 
-- 這里是把select放在里面
delimiter $$
create procedure proc15(in in_ename varchar(50))
begin
	declare de_sal decimal(7,2);
 
	select emp.sal into @de_sal from emp where emp.ename =in_ename;
	if @de_sal<10000
		then set @de_result='試用薪資';
	elseif @de_sal<20000
		then set @de_result='轉正薪資';
	else
		 set @de_result='元老薪資';
	end if;
	select @de_sal;
end $$
delimiter ;
 
call proc15('關羽');

 五.流程控制—case

CASE是另一個條件判斷的語句,類似于編程語言中的switch語法

語法

 演示

/*
支付方式:
1  微信支付
2  支付寶支付
3  銀行卡支付
4  其他方式支付
*/
-- 格式一
delimiter $$
create procedure proc16(in in_type int)
begin
	case in_type
		when 1 then select '微信支付';
		when 2 then select '支付寶支付';
		when 3 then select '銀行卡支付';
		when 4 then select '其他方式支付';
	end case;
end $$
delimiter ;
 
call proc16(2);
 
-- 格式二
delimiter $$
create procedure proc17(in in_type int)
begin
	case 
		when in_type=1 then select '微信支付';
		when in_type=2 then select '支付寶支付';
		when in_type=3 then select '銀行卡支付';
		when in_type=4 then select '其他方式支付';
	end case;
end $$
delimiter ;
 
call proc17(4);

 六.流程控制—循環(huán)

概述

  • 循環(huán)是一段在程序中只出現(xiàn)一次,但可能會連續(xù)運行多次的代碼。
  • 循環(huán)中的代碼會運行特定的次數(shù),或者是運行到特定條件成立時結束循環(huán)

循環(huán)分類

  • while
  • repeat
  • loop

循環(huán)控制

  • leave類似于break,跳出,結束當前所在的循環(huán)
  • iterate類似于continue,繼續(xù),結束本次循環(huán),繼續(xù)下一次

循環(huán)—while

格式

 演示

/*
【標簽:】while循環(huán)條件do
	循環(huán)體;
end while【標簽】;
-*/
-- 需求:向表中添加指定條數(shù)的數(shù)據(jù)
-- -------存儲過程-循環(huán)-while
 
delimiter $$
create procedure proc18(in in_count int)
begin
	declare i int default 1;
	label:while i<=in_count do
		insert into user(id,name,password) values(i,concat('user-',i),123456);
		set i=i+1;
		if i=5 then leave label;
		end if;
	end while label;
	
end $$
delimiter ;
call proc18(10);

這里我的理解,當要使用leave、iterate時要寫label就相當于一個名字,當然這個label可以用其他字符代替比如a,只要在使用leave、iterate時后面加上自己定義的label就行

 iterate:跳過本次循環(huán)的剩余代碼,進入下一次循環(huán)

循環(huán)—repeat

格式

演示

truncate user; 
delimiter $$
create procedure proc20(in in_count int)
begin
	declare i int default 1;
	a:repeat 
		insert into user(id,name,password) values(i,concat('user-',i),123456);
		set i=i+1;
		until i>in_count 
	end repeat;
 
	
end $$
delimiter ;
call proc20(10);

循環(huán)—loop

格式

 演示

 repeat和Loop區(qū)別是repeat有自己退出循環(huán)的語句until,Loop使用的是if判斷語句

到此這篇關于MySQL存儲過程的傳參和流程控制的文章就介紹到這了,更多相關MySQL存儲過程的傳參內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL數(shù)據(jù)庫之約束簡析

    MySQL數(shù)據(jù)庫之約束簡析

    這篇文章主要介紹了MySQL數(shù)據(jù)庫之約束簡析,約束是作用于表中字段上的規(guī)則,用于限制存儲在表中的數(shù)據(jù),保證數(shù)據(jù)庫中數(shù)據(jù)的正確、有效性和完整性,需要的朋友可以參考下
    2023-09-09
  • MySQL主庫binlog(master-log)與從庫relay-log關系代碼詳解

    MySQL主庫binlog(master-log)與從庫relay-log關系代碼詳解

    這篇文章主要介紹了MySQL主庫binlog與從庫relay-log關系的相關內容,涉及部分代碼,需要的朋友可以參考。
    2017-10-10
  • linux下mysql開啟遠程訪問權限 防火墻開放3306端口

    linux下mysql開啟遠程訪問權限 防火墻開放3306端口

    這篇文章主要為大家詳細介紹了linux下mysql開啟遠程訪問權限,防火墻開放3306端口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • MySQL分區(qū)表的局限和限制詳解

    MySQL分區(qū)表的局限和限制詳解

    本文對Mysql分區(qū)表的局限性做了一些總結,因為個人能力以及測試環(huán)境的 原因,有可能有錯誤的地方,還請大家看到能及時指出,當然有興趣的朋友可以去官方網(wǎng)站查閱。
    2017-03-03
  • 探討:MySQL中如何查詢當前正在運行的SQL語句

    探討:MySQL中如何查詢當前正在運行的SQL語句

    本篇文章是對在MySQL中如何查詢當前正在運行的SQL語句進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • Mysql DDL常見操作匯總

    Mysql DDL常見操作匯總

    這篇文章主要介紹了Mysql DDL常見操作匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • window上驗證mysql是否安裝成功的操作過程

    window上驗證mysql是否安裝成功的操作過程

    這篇文章主要介紹了window上驗證mysql是否安裝成功,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-08-08
  • MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化

    MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化

    在業(yè)務場景中經(jīng)常會用到like模糊查詢,但是大家都知道,like是用不到索引的,所以當數(shù)據(jù)量非常大時,速度會非常慢,這篇文章主要給大家介紹了關于MySQL中Like模糊查詢速度太慢該如何進行優(yōu)化的相關資料,需要的朋友可以參考下
    2021-12-12
  • 使用JDBC在MySQL數(shù)據(jù)庫中如何快速批量插入數(shù)據(jù)

    使用JDBC在MySQL數(shù)據(jù)庫中如何快速批量插入數(shù)據(jù)

    這篇文章主要介紹了使用JDBC在MySQL數(shù)據(jù)庫中如何快速批量插入數(shù)據(jù),可以有效的解決一次插入大數(shù)據(jù)的方法,
    2016-11-11
  • Win中安裝mysql的詳細步驟

    Win中安裝mysql的詳細步驟

    這篇文章主要為大家詳細介紹了Win中安裝mysql的詳細步驟,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10

最新評論