MySQL存儲(chǔ)過程圖文實(shí)例講解
MySQL的存儲(chǔ)過程
存儲(chǔ)過程是數(shù)據(jù)庫(kù)的一個(gè)重要的功能,MySQL 5.0以前并不支持存儲(chǔ)過程,這使得MySQL在應(yīng)用上大打折扣。好在MySQL 5.0開始支持存儲(chǔ)過程,這樣即可以大大提高數(shù)據(jù)庫(kù)的處理速度,同時(shí)也可以提高數(shù)據(jù)庫(kù)編程的靈活性。
MySQL存儲(chǔ)過程的創(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默認(rèn)以";"為分隔符,如果沒有聲明分割符,則編譯器會(huì)把存儲(chǔ)過程當(dāng)成SQL語句進(jìn)行處理,因此編譯過程會(huì)報(bào)錯(cuò),所以要事先用“DELIMITER //”聲明當(dāng)前段分隔符,讓編譯器把兩個(gè)"//"之間的內(nèi)容當(dāng)做存儲(chǔ)過程的代碼,不會(huì)執(zhí)行這些代碼;“DELIMITER ;”的意為把分隔符還原。
參數(shù)
存儲(chǔ)過程根據(jù)需要可能會(huì)有輸入、輸出、輸入輸出參數(shù),如果有多個(gè)參數(shù)用","分割開。MySQL存儲(chǔ)過程的參數(shù)用在存儲(chǔ)過程的定義,共有三種參數(shù)類型,IN,OUT,INOUT:
IN參數(shù)的值必須在調(diào)用存儲(chǔ)過程時(shí)指定,在存儲(chǔ)過程中修改該參數(shù)的值不能被返回,為默認(rèn)值OUT:該值可在存儲(chǔ)過程內(nèi)部被改變,并可返回INOUT:調(diào)用時(shí)指定,并且可被改變和返回
過程體
過程體的開始與結(jié)束使用BEGIN與END進(jìn)行標(biāo)識(shí)。

1、簡(jiǎn)單實(shí)例
create procedure demo.p_test1() begin -- 使用 declare語句聲明一個(gè)變量 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存儲(chǔ)過程講解的文章就介紹到這了,更多相關(guān)MySQL存儲(chǔ)過程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL自定義函數(shù)判斷是否正整數(shù)的實(shí)例代碼
這篇文章主要介紹了MYSQL自定義函數(shù)判斷是否正整數(shù) 的實(shí)例代碼,主要是使用正則表達(dá)式來判斷,具體實(shí)例代碼大家跟隨小編一起通過本文學(xué)習(xí)吧2018-11-11
mysql分區(qū)表學(xué)習(xí)之日期分區(qū)
這篇文章主要給大家介紹了關(guān)于mysql分區(qū)表學(xué)習(xí)之日期分區(qū)的相關(guān)資料,分區(qū)是一種表的設(shè)計(jì)模式,通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個(gè)小表,需要的朋友可以參考下2023-08-08
MySQL數(shù)據(jù)庫(kù)維護(hù)中監(jiān)控所用到的常用命令
這篇文章主要介紹額MySQL監(jiān)控時(shí)常用的的幾個(gè)MySQL命令,需要的朋友可以收藏下2013-08-08
MySQL字符串索引更合理的創(chuàng)建規(guī)則討論
這篇文章主要給大家介紹了關(guān)于MySQL字符串索引更合理的創(chuàng)建規(guī)則,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11

