信息化 频道

脱离企业战略 IT曲线救国也能成功

(3) 创建存储过程

MYSQL存储过程大致格式如下:

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的控制台执行创建过程的脚本时,要选择一个分隔符 DELIMITER。

给出一个最简单的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;

0
相关文章