(3) 创建存储过程
MYSQL存储过程大致格式如下:
首先说明一点,在MYSQL的控制台执行创建过程的脚本时,要选择一个分隔符 DELIMITER。CREATE PROCEDURE procedure1 /**//* name存储过程名*/
(IN parameter1 INTEGER) /**//* parameters参数*/
BEGIN /**//* start of block语句块头*/
DECLARE variable1 CHAR(10); /**//* variables变量声明*/
IF parameter1 = 17 THEN /**//* start of IF IF条件开始*/
SET variable1 = 'birds'; /**//* assignment赋值*/
ELSE
SET variable1 = 'beasts'; /**//* assignment赋值*/
END IF; /**//* end of IF IF结束*/
INSERT INTO table1 VALUES (variable1); /**//* statement SQL语句*/
END /**//* end of block语句块结束*/
给出一个最简单的MYSQL存储过程示例:
给出一个带有输入输出参数的存储过程示例:mysql> DELIMITER //
mysql> CREATE PROCEDURE P()SELECT * FROM TEST; //
Query OK, 0 rows affected (0.31 sec)
![]()
mysql> DELIMITER ;
mysql> CALL P();
+----+----------+---------------------+---------------------+
| ID | MC | DT | RQ |
+----+----------+---------------------+---------------------+
| 1 | ZhangSan | 2007-05-25 09:54:59 | 0000-00-00 00:00:00 |
| 2 | LiSi | 2007-05-25 10:02:47 | 0000-00-00 00:00:00 |
| 3 | WangWu | 2007-05-25 10:04:01 | 2007-05-25 10:03:29 |
+----+----------+---------------------+---------------------+
3 rows in set (0.00 sec)
![]()
Query OK, 0 rows affected (0.02 sec)
存储过程内容的查看:mysql> DELIMITER //
mysql> CREATE PROCEDURE P_WITH_PARA(IN PARA_IN INT,OUT PARA_OUT INT)
-> BEGIN
-> DECLARE PARA INT;
-> SET PARA = 20;
-> SET PARA_OUT = PARA_IN + PARA;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
![]()
mysql> CALL P_WITH_PARA(10,@SUM);//
Query OK, 0 rows affected (0.01 sec)
![]()
mysql> SELECT @SUM//
+------+
| @SUM |
+------+
| 30 |
+------+
1 row in set (0.00 sec)
mysql> select body from proc where name='P_WITH_PARA';
+---------------------------------------------------------------------------+
| body |
+---------------------------------------------------------------------------+
| BEGIN
DECLARE PARA INT;
SET PARA = 20;
SET PARA_OUT = PARA_IN + PARA;
END |
+---------------------------------------------------------------------------+
1 row in set (0.01 sec)
MYSQL存储过程中的一些常用控制结构:选择结构:
IF ... THEN
...
ELSE
...
END IF;
![]()
CASE ...
WHEN ... THEN
WHEN ... THEN
END CASE;
WHILE ...
...
END WHILE;
![]()
LOOP_LABEL:LOOP
...
ITERATE LOOP_LABEL;
...
LEAVE LOOP_LABEL;
END LOOP;
![]()
REPEAT
...
UNTIL ...
END REPEAT;
![]()
LABEL LABEL_NAME;
...
GOTO LABEL_NAME;