時間:2022-03-09來源:www.farandoo.com作者:電腦系統城
存儲過程是數據庫的一個重要的功能,MySQL 5.0以前并不支持存儲過程,這使得MySQL在應用上大打折扣。好在MySQL 5.0開始支持存儲過程,這樣即可以大大提高數據庫的處理速度,同時也可以提高數據庫編程的靈活性。
語法
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 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 ; |
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存儲過程講解的文章就介紹到這了
2022-05-08
Mysql中常用的幾種join連接方式總結匯總2022-03-01
千萬級用戶系統SQL調優實戰分享2022-03-01
mysql遠程跨庫聯合查詢的示例為什么要主從同步? 主從同步的原理 MYSQL數據庫進行主從同步 創建兩個MYSQL數據庫 初始化,安裝主機數據庫 配置從機 測試主從同步 ...
2022-03-01
這篇文章主要介紹了銀河麒麟V10安裝MySQL8028的圖文教程,并詳細介紹了遠程訪問的實現方法,本文通過圖文命令給大家介紹的非常詳細...
2022-02-28