当前位置:Gxlcms > 数据库问题 > MySQL 初步认识存储过程

MySQL 初步认识存储过程

时间:2021-07-01 10:21:17 帮助过:11人阅读

/*查询数据库全部的存储过程*/ 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 初步认识存储过程

标签:它的   http   sql   drop   exists   性能   语句   add   str   

人气教程排行