首页 > 代码库 > MySQL 初步认识存储过程

MySQL 初步认识存储过程

创建一个简单的存储过程

基本的操作

 1   /*查询数据库全部的存储过程*/
 2   show procedure status; 
 3  
 4  /*查询都一个存储过程*/  
 5  show create procedure tes1;     
 6 
 7  /*创建一个存储过程*/
 8  CREATE PROCEDURE test1;
 9  
10  /* 删除一个存储过程 【没有括号()】 */
11  DROP PROCEDURE test1;   
12  
13  /*执行一个存储过程 【不管有没有参数都必须有括号】*/
14  CALL test1(); 

创建

 1 DROP PROCEDURE `proc_test`(
 2 IN a int, 
 3 IN b int, 
 4 OUT sum int
 5 )
 6 BEGIN
 7     DECLARE c int;
 8     if a is null then set a = 0; 
 9     end if;
10   
11     if b is null then set b = 0;
12     end if;
13 
14     set sum  = a + b;
15 END;

执行以上存储结果,验证是否正确,如下图,结果OK:

set @b=5;
--执行
call proc_adder(2,@b,@s);
select @s as sum;

技术分享

存储过程中的控制语句

IF语句:

 1 DROP PROCEDURE IF EXISTS stutse; 
 2 /*存储IF的使用*/
 3 CREATE PROCEDURE stutse (          
 4     IN ax INT
 5 )
 6 BEGIN
 7     DECLARE c VARCHAR(30);
 8 
 9  IF ax = 0 THEN 
10     SET c ="我是C,ax为0";
11 ELSEIF ax = 1 THEN
12  SET c = "我是C,ax为1";
13 ELSE
14   SET c ="我是C";
15 END if;
16  SELECT c;    
17 
18 END;
19 
20 SET @ax=4;
21 CALL stutse(@ax);  

 

CASE语句:

 1 DROP PROCEDURE IF EXISTS test2;
 2 /*存储case的使用*/
 3 CREATE PROCEDURE test2(       
 4   in a INT    
 5 )
 6 BEGIN  
 7  DECLARE b VARCHAR(50);
 8 
 9  CASE a
10  WHEN 0 THEN 
11      SET b = "000";
12  WHEN 1 THEN
13    set b = "111";
14  ELSE
15    SET b = "bbbb";
16  END CASE;
17 
18 SELECT b;
19 END;
20 
21 SET @a=2;
22 CALL test2(@a);

 

存储过程弊端

不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;

不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;

...

MySQL 初步认识存储过程