<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
in表示傳入的引數,可以傳入數值或者變數,即使傳入變數,並不會更改變數的值,可以內部更改,僅僅作用在函數範圍內。
use test_procedure; -- 傳入引數in -- 封裝有引數的儲存過程,傳入員工編號,查詢員工資訊 delimiter $$ create procedure proc6(in in_empno int) begin select * from emp where emp.empno =in_empno; end $$ delimiter ; call proc6(1001); -- 封裝有引數的儲存過程,可以通過傳入部門名和薪資,查詢指定部門,並且薪資大於指定值的員工資訊 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表示從儲存過程內部傳值給呼叫者
演示
-- 封裝有引數的儲存過程,傳入員工編號,返回員工名字 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);-- 執行這一句不會輸出 select @o_ename;
-- 封裝有引數的儲存過程,傳入員工編號,返回員工名字和薪資 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表示從外部傳入的引數經過修改後可以返回的變數,既可以使用傳入變數的值也可以修改變數的值(即使函數執行完)
演示
-- 傳入一個數位,傳出這個數位的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語句包含多個條件判斷,根據結果為TRUE、FALSE執行語句,與程式語言中的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 '優秀'; 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是另一個條件判斷的語句,類似於程式語言中的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);
概述
迴圈分類
迴圈控制
格式
演示
/* 【標籤:】while迴圈條件do 迴圈體; end while【標籤】; -*/ -- 需求:向表中新增指定條數的資料 -- -------儲存過程-迴圈-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:跳過本次迴圈的剩餘程式碼,進入下一次迴圈
格式
演示
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);
格式
演示
repeat和Loop區別是repeat有自己退出迴圈的語句until,Loop使用的是if判斷語句
到此這篇關於MySQL儲存過程的傳參和流程控制的文章就介紹到這了,更多相關MySQL儲存過程的傳參內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45