龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

MySQL数据库新特性之存储过程入门教程(1)(3)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
7 MYSQL存储过程的语法结构 MYSQL存储过程中支持IF,CASE,ITERATE,LEAVE LOOP,WHILE和REPEAT等语法结构和语句,在本文中,着重介绍IF,CASE和WHILE语法,因为它们使

7 MYSQL存储过程的语法结构

MYSQL存储过程中支持IF,CASE,ITERATE,LEAVE LOOP,WHILE和REPEAT等语法结构和语句,在本文中,着重介绍IF,CASE和WHILE语法,因为它们使用的最为广泛。

IF 语句

if语句使用的是if…then end if的语法结构,例子如下:

  1. DELIMITER //  
  2. CREATE PROCEDURE `proc_IF` (IN param1 INT)  
  3. BEGIN 
  4. DECLARE variable1 INT;  
  5. SET variable1 = param1 + 1;  
  6. IF variable1 = 0 THEN 
  7. SELECT variable1;  
  8. END IF;  
  9. IF param1 = 0 THEN 
  10. SELECT 'Parameter value = 0';  
  11. ELSE 
  12. SELECT 'Parameter value <= 0';  
  13. END IF;  
  14. END // 

CASE语句

当有很多IF语句时,就应该考虑使用CASE语句了,它是多分支选择语句,有两种写法:

第一种写法:

  1. DELIMITER //  
  2. CREATE PROCEDURE `proc_CASE` (IN param1 INT)  
  3. BEGIN 
  4. DECLARE variable1 INT;  
  5. SET variable1 = param1 + 1;  
  6. CASE variable1  
  7. WHEN 0 THEN 
  8. INSERT INTO table1 VALUES (param1);  
  9. WHEN 1 THEN 
  10. INSERT INTO table1 VALUES (variable1);  
  11. ELSE 
  12. INSERT INTO table1 VALUES (99);  
  13. END CASE;  
  14. END // 

另外一种写法:

  1. DELIMITER //  
  2. CREATE PROCEDURE `proc_CASE` (IN param1 INT)  
  3. BEGIN 
  4. DECLARE variable1 INT;  
  5. SET variable1 = param1 + 1;  
  6. CASE 
  7. WHEN variable1 = 0 THEN 
  8. INSERT INTO table1 VALUES (param1);  
  9. WHEN variable1 = 1 THEN 
  10. INSERT INTO table1 VALUES (variable1);  
  11. ELSE 
  12. INSERT INTO table1 VALUES (99);  
  13. END CASE;  
  14. END // 

WHILE语句

WHILE语句跟普通编程语言中的while语句差不多,例子如下:

  1. DELIMITER //  
  2. CREATE PROCEDURE `proc_WHILE` (IN param1 INT)  
  3. BEGIN 
  4. DECLARE variable1, variable2 INT;  
  5. SET variable1 = 0;  
  6. WHILE variable1   
  7. INSERT INTO table1 VALUES (param1);  
  8. SELECT COUNT(*) INTO variable2 FROM table1;  
  9. SET variable1 = variable1 + 1;  
  10. END WHILE;  
  11. END // 

8 MYSQL存储过程中的游标

MYSQL中的游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。MYSQL中的游标的语法如下:

  1. DECLARE cursor-name CURSOR FOR SELECT ...; /* 声明一个游标,名称为cursor-name,并用CURSOR FOR SELECT*/  
  2. DECLARE CONTINUE HANDLER FOR NOT FOUND /*指定当遍历完结果集后,游标如何继续处理*/  
  3. OPEN cursor-name; /*打开游标 */  
  4. FETCH cursor-name INTO variable [, variable]; /* 将变量赋值给游标*/  
  5. CLOSE cursor-name; /*使用后关闭游标*/ 

一个具体的例子如下:

  1. DELIMITER //  
  2. CREATE PROCEDURE `proc_CURSOR` (OUT param1 INT)  
  3. BEGIN 
  4. DECLARE a, b, c INT;  
  5. DECLARE cur1 CURSOR FOR SELECT col1 FROM table1;  
  6. DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;  
  7. OPEN cur1;  
  8. SET b = 0;  
  9. SET c = 0;  
  10. WHILE b = 0 DO  
  11. FETCH cur1 INTO a;  
  12. IF b = 0 THEN 
  13. SET c = c + a;  
  14. END IF;  
  15. END WHILE;  
  16. CLOSE cur1;  
  17. SET param1 = c;  
  18. END // 

其中,DECLARE cur1 CURSOR FOR SELECT col1 FROM table1;

表示将从table1表中选取col1列的内容放到游标curl中,即每次游标遍历的结果都放在curl中,要注意游标只能向前遍历,而不能向后,并且注意,游标不能更新,最后关闭游标。


精彩图集

赞助商链接