系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 數據庫 > Mysql > 詳細頁面

MySQL存儲過程圖文實例講解教程

時間:2022-03-09來源:www.farandoo.com作者:電腦系統城

MySQL的存儲過程

存儲過程是數據庫的一個重要的功能,MySQL 5.0以前并不支持存儲過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0開始支持存儲過程,這樣即可以大大提高數據庫的處理速度,同時也可以提高數據庫編程的靈活性。

MySQL存儲過程的創建

語法

CREATE PROCEDURE  過程名([[IN|OUT|INOUT] 參數名 數據類型[,[IN|OUT|INOUT] 參數名 數據類型…]]) [特性 ...] 過程體

1
2
3
4
5
6
7
DELIMITER //
  CREATE PROCEDURE myproc(OUT s int)
    BEGIN
      SELECT COUNT(*) INTO s FROM students;
    END
    //
DELIMITER ;

分隔符

MySQL默認以";"為分隔符,如果沒有聲明分割符,則編譯器會把存儲過程當成SQL語句進行處理,因此編譯過程會報錯,所以要事先用“DELIMITER //”聲明當前段分隔符,讓編譯器把兩個"//"之間的內容當做存儲過程的代碼,不會執行這些代碼;“DELIMITER ;”的意為把分隔符還原。

參數

存儲過程根據需要可能會有輸入、輸出、輸入輸出參數,如果有多個參數用","分割開。MySQL存儲過程的參數用在存儲過程的定義,共有三種參數類型,IN,OUT,INOUT:

IN參數的值必須在調用存儲過程時指定,在存儲過程中修改該參數的值不能被返回,為默認值OUT:該值可在存儲過程內部被改變,并可返回INOUT:調用時指定,并且可被改變和返回

過程體

過程體的開始與結束使用BEGIN與END進行標識。

1、簡單實例

1
2
3
4
5
6
7
8
9
10
11
12
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、通過游標遍歷結果集

1
2
3
4
create table demo.test(
    id int,
    cnt varchar(50)
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
create procedure demo.p_test2()
-- 通過游標遍歷結果集
begin
  -- 聲明變量
  declare id int default 0;
  declare name varchar(50) default '';
  declare done boolean default 1;
  -- 聲明游標
  declare rs cursor for SELECT deptno,dname from demo.dept ;
  -- 定義異常:
  declare continue handler for SQLSTATE '02000' SET done = 0;
  -- 打開游標
  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;
  -- 關閉游標
  close rs;
end;
1 call demo.p_test2();

1 SELECT * from  demo.test;

總結 

到此這篇關于MySQL存儲過程講解的文章就介紹到這了

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載

jlzzjlzz亚洲乱熟在线播放