<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
由MySQL5.0 版本開始支援儲存過程。
如果在實現使用者的某些需求時,需要編寫一組複雜的SQL語句才能實現的時候,那麼我們就可以將這組複雜的SQL語句集提前編寫在資料庫中,由JDBC呼叫來執行這組SQL語句。把編寫在資料庫中的SQL語句集稱為儲存過程。
儲存過程:(PROCEDURE)是事先經過編譯並儲存在資料庫中的一段SQL語句的集合。呼叫儲存過程可以簡化應用開發人員的很多工作,減少資料在資料庫和應用伺服器之間的傳輸,對於提高資料處理的效率是很有好處的。
就是資料庫 SQL 語言層面的程式碼封裝與重用。
儲存過程就類似於Java中的方法,需要先定義,使用時需要呼叫。儲存過程可以定義引數,引數分為IN、OUT、INOUT型別三種型別。
DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PROCEDURE 資料庫名.儲存過程名([in變數名 型別,out 引數 2,...]) /*LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string'*/ BEGIN [DECLARE 變數名 型別 [DEFAULT 值];] 儲存過程的語句塊; END$$ DELIMITER ;
● 儲存過程中的引數分別是 in,out,inout三種型別;
● 儲存過程中的語句必須包含在BEGIN和END之間。
● DECLARE中用來宣告變數,變數預設賦值使用的DEFAULT,語句塊中改變變數值,使用SET 變數=值;
DELIMITER $$ CREATE PROCEDURE `demo`.`demo1`() -- 儲存過程體 BEGIN -- DECLARE宣告 用來宣告變數的 DECLARE de_name VARCHAR(10) DEFAULT ''; SET de_name = "jim"; -- 測試輸出語句(不同的資料庫,測試語句都不太一樣。 SELECT de_name; END$$ DELIMITER ;
呼叫儲存過程
CALL demo1();
先定義一個student資料庫表:
現在要查詢這個student表中的sex為男的有多少個人。
DELIMITER $$ CREATE PROCEDURE `demo`.`demo2`(IN s_sex CHAR(1),OUT s_count INT) -- 儲存過程體 BEGIN -- 把SQL中查詢的結果通過INTO賦給變數 SELECT COUNT(*) INTO s_count FROM student WHERE sex= s_sex; SELECT s_count; END$$ DELIMITER ;
呼叫這個儲存過程
-- @s_count表示測試出輸出的引數 CALL demo2 ('男',@s_count);
IF 語句包含多個條件判斷,根據結果為 TRUE、FALSE執行語句,與程式語言中的 if、else if、else 語法類似。
DELIMITER $$ CREATE PROCEDURE `demo`.`demo3`(IN `day` INT) -- 儲存過程體 BEGIN IF `day` = 0 THEN SELECT '星期天'; ELSEIF `day` = 1 THEN SELECT '星期一'; ELSEIF `day` = 2 THEN SELECT '星期二'; ELSE SELECT '無效日期'; END IF; END$$ DELIMITER ;
呼叫這個儲存過程
CALL demo3(2);
case是另一個條件判斷的語句,類似於程式語言中的 choose、when語法。MySQL 中的 case語句有兩種語法格式。
第一種
DELIMITER $$ CREATE PROCEDURE demo4(IN num INT) BEGIN CASE -- 條件開始 WHEN num<0 THEN SELECT '負數'; WHEN num>0 THEN SELECT '正數'; ELSE SELECT '不是正數也不是負數'; END CASE; -- 條件結束 END$$ DELIMITER;
呼叫這個儲存過程
CALL demo4(1);
2.第二種
DELIMITER $$ CREATE PROCEDURE demo5(IN num INT) BEGIN CASE num -- 條件開始 WHEN 1 THEN SELECT '輸入為1'; WHEN 0 THEN SELECT '輸入為0'; ELSE SELECT '不是1也不是0'; END CASE; -- 條件結束 END$$ DELIMITER;
呼叫此函數
CALL demo5(0);
DELIMITER $$ CREATE PROCEDURE demo6(IN num INT,OUT SUM INT) BEGIN SET SUM = 0; WHILE num<10 DO -- 迴圈開始 SET num = num+1; SET SUM = SUM+num; END WHILE; -- 迴圈結束 END$$ DELIMITER;
呼叫此函數
-- 呼叫函數 CALL demo6(0,@sum); -- 查詢函數 SELECT @sum;
REPEATE…UNTLL 語句的用法和 Java中的 do…while 語句類似,都是先執行迴圈操作,再判斷條件,區別是REPEATE 表示式值為 false時才執行迴圈操作,直到表示式值為 true停止。
-- 建立過程 DELIMITER $$ CREATE PROCEDURE demo7(IN num INT,OUT SUM INT) BEGIN SET SUM = 0; REPEAT-- 迴圈開始 SET num = num+1; SET SUM = SUM+num ; UNTIL num>=10 END REPEAT; -- 迴圈結束 END$$ DELIMITER;
呼叫此函數
CALL demo7(9,@sum); SELECT @sum;
迴圈語句,用來重複執行某些語句。
執行過程中可使用 LEAVE語句或者ITEREATE來跳出迴圈,也可以巢狀IF等判斷語句。
LEAVE 語句效果對於Java中的break,用來終止迴圈;
ITERATE語句效果相當於Java中的continue,用來跳過此次迴圈。進入下一次迴圈。且ITERATE之下的語句將不在進行。
DELIMITER $$ CREATE PROCEDURE demo8(IN num INT,OUT SUM INT) BEGIN SET SUM = 0; demo_sum:LOOP-- 迴圈開始 SET num = num+1; IF num > 10 THEN LEAVE demo_sum; -- 結束此次迴圈 ELSEIF num < 9 THEN ITERATE demo_sum; -- 跳過此次迴圈 END IF; SET SUM = SUM+num; END LOOP demo_sum; -- 迴圈結束 END$$ DELIMITER;
呼叫此函數
CALL demo8(0,@sum); SELECT @sum;
DELIMITER $$ CREATE PROCEDURE demo9(IN s_student VARCHAR(10),IN s_sex CHAR(1),OUT s_result VARCHAR(20)) BEGIN -- 宣告一個變數 用來決定這個名字是否已經存在 DECLARE s_count INT DEFAULT 0; -- 驗證這麼名字是否已經存在 SELECT COUNT(*) INTO s_count FROM student WHERE `name` = s_student; IF s_count = 0 THEN INSERT INTO student (`name`, sex) VALUES(s_student, s_sex); SET s_result = '資料新增成功'; ELSE SET s_result = '名字已存在,不能新增'; SELECT s_result; END IF; END$$ DELIMITER;
呼叫此函數
CALL demo9("Jim","女",@s_result);
再次呼叫次函數
CALL demo9("Jim","女",@s_result)
SHOW PROCEDURE STATUS
SHOW PROCEDURE STATUS WHERE db = 'db名字' AND NAME = 'name名字';
SHOW PROCEDURE STATUS WHERE NAME LIKE '%mo%';
SHOW CREATE PROCEDURE 儲存過程名;
DROP PROCEDURE 儲存過程名;
在mybatis當中,呼叫儲存過程
<parameterMap type="savemap" id=「usermap"> <parameter property="name" jdbcType="VARCHAR" mode="IN"/> <parameter property="sex" jdbcType="CHAR" mode="IN"/> <parameter property="result" jdbcType="VARCHAR" mode="OUT"/> </parameterMap> <insert id="saveUserDemo" parameterMap="savemap" statementType="CALLABLE"> {call saveuser(?, ?, ?)} </insert >
呼叫資料庫管理
HashMap<String, Object> map = new HashMap<String, Object>(); map.put("name", "Jim"); map.put("sex","男"); userDao.saveUserDemo(map); map.get(「result」);//獲得輸出引數
通過這樣就可以呼叫資料庫中的儲存過程的結果。
到此這篇關於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