CREATE PROCEDURE procedurel /*name 存储过程名*/ (IN parameter1 INTEGER) /*parameters 参数*/ BEGIN /*start of blokc 语句块头*/ DECLARE variable1 CHAR(10); /*variables变量声明*/ IF parameter1 = 17 THEN /*start of IF IF条件开始*/ SET variable1 = 'birds'; /*assignment赋值*/ END IF; /*end of IF IF结束*/ INSERT INTO table1 VALUES (variable1);/*statement SQL语句*/ END /*end of block 语句块结束*/
MySQL 版本:5.0.45 phpMyAdmin版本:2.11.3 首先看MySQL 5.0参考手册中关于创建存储过程的语法说明: CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [ IN | OUT | INOUT ] param_name type type: Any valid MySQL data type characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER } | COMMENT 'string' routine_body: Valid SQL procedure statement 如果你对MySQL还不太熟悉的话,单单看这个语法结构当然不足以进行MySQL存储过程编程。我之前基本都是使用MS SQL SERVER,所以以下记录我熟悉MySQL存储过程的过程,也是重点介绍MS SQL SERVER与MySQL区别较大的地方。 第一步,当然是写个Hello Word的存储过程,如下:
复制代码 代码如下:
CREATE PROCEDURE phelloword() BEGIN SELECT 'Hello Word!' AS F; END;
将上面创建phelloword存储过程的语句拷到phpMyAdmin中执行,报如下错误: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 在这个问题上我纠缠了很久,在MySQL的命令行工具中执行同样不成功,但是根据提示信息可以知道执行在 SELECT 'Hello Word!' AS F;处结束,后面的END;没有执行,这显然会导致错误。 这里需要选择以个分隔符,语法如下:DELIMITER // 分隔符是通知MySQL客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号。 因此上面的存储过程改为: