MySQL存儲過程圖文實例講解
MySQL的存儲過程
存儲過程是數(shù)據(jù)庫的一個重要的功能,MySQL 5.0以前并不支持存儲過程,這使得MySQL在應(yīng)用上大打折扣。好在MySQL 5.0開始支持存儲過程,這樣即可以大大提高數(shù)據(jù)庫的處理速度,同時也可以提高數(shù)據(jù)庫編程的靈活性。
MySQL存儲過程的創(chuàng)建
語法
CREATE PROCEDURE 過程名([[IN|OUT|INOUT] 參數(shù)名 數(shù)據(jù)類型[,[IN|OUT|INOUT] 參數(shù)名 數(shù)據(jù)類型…]]) [特性 ...] 過程體
DELIMITER // CREATE PROCEDURE myproc(OUT s int) BEGIN SELECT COUNT(*) INTO s FROM students; END // DELIMITER ;
分隔符
MySQL默認以";"為分隔符,如果沒有聲明分割符,則編譯器會把存儲過程當(dāng)成SQL語句進行處理,因此編譯過程會報錯,所以要事先用“DELIMITER //”聲明當(dāng)前段分隔符,讓編譯器把兩個"//"之間的內(nèi)容當(dāng)做存儲過程的代碼,不會執(zhí)行這些代碼;“DELIMITER ;”的意為把分隔符還原。
參數(shù)
存儲過程根據(jù)需要可能會有輸入、輸出、輸入輸出參數(shù),如果有多個參數(shù)用","分割開。MySQL存儲過程的參數(shù)用在存儲過程的定義,共有三種參數(shù)類型,IN,OUT,INOUT:
IN參數(shù)的值必須在調(diào)用存儲過程時指定,在存儲過程中修改該參數(shù)的值不能被返回,為默認值OUT:該值可在存儲過程內(nèi)部被改變,并可返回INOUT:調(diào)用時指定,并且可被改變和返回
過程體
過程體的開始與結(jié)束使用BEGIN與END進行標(biāo)識。
1、簡單實例
create procedure demo.p_test1() begin -- 使用 declare語句聲明一個變量 declare id int default 0; declare name varchar(50) default ''; -- 使用set語句給變量賦值 set id=7521; -- 將users表中id=1的名稱賦值給username select ename into name from demo.emp where empno=id; -- 返回變量 select name; end;
2、通過游標(biāo)遍歷結(jié)果集
create table demo.test( id int, cnt varchar(50) )
create procedure demo.p_test2() -- 通過游標(biāo)遍歷結(jié)果集 begin -- 聲明變量 declare id int default 0; declare name varchar(50) default ''; declare done boolean default 1; -- 聲明游標(biāo) declare rs cursor for SELECT deptno,dname from demo.dept ; -- 定義異常: declare continue handler for SQLSTATE '02000' SET done = 0; -- 打開游標(biāo) open rs; delete from demo.test; while done do begin fetch rs into id,name; INSERT into demo.test SELECT e.deptno,count(1) from demo.emp e WHERE e.deptno =id group by e.deptno; end ; end while; -- 關(guān)閉游標(biāo) close rs; end;
call demo.p_test2();
SELECT * from demo.test;
總結(jié)
到此這篇關(guān)于MySQL存儲過程講解的文章就介紹到這了,更多相關(guān)MySQL存儲過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決MySQL因不能創(chuàng)建臨時文件而導(dǎo)致無法啟動的方法
這篇文章主要跟大家介紹了關(guān)于解決MySQL因不能創(chuàng)建臨時文件而導(dǎo)致無法啟動的方法,文中通過示例代碼介紹了詳細的解決方法,對大家具有一定的的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-06-06MySQL中show命令方法得到表列及整個庫的詳細信息(精品珍藏)
MySQL中show 句法得到表列及整個庫的詳細信息,方便查看數(shù)據(jù)庫的詳細信息。2010-11-11