首页 > 数据库 > MySQL > 正文

MySql的存储过程学习小结 附pdf文档下载

2024-07-24 12:49:20
字体:
来源:转载
供稿:网友
存储过程是一种存储在数据库库中的程序(就像正规语言里的子程序一样),准确的来说,MySql支持的“routine(例程)”有两种:一是我们说的存储过程,二是在其它sql语句中可以返回值的函数(使用起来和mysql预装载的函数一样,如pi())。

一个存储过程包括名字,参数列表,以及可以包括很多sql语句的sql语句集。在这里对局部变量,异常处理,循环控制和if条件语句有新的语法定义。

下面是一个包括存储过程的实例声明:
复制代码 代码如下:

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客户端已经输入完成的符号。一直都是用“;”,但是在存储过程中不行,因为存储过程中很多语句都需要用到分号。
因此上面的存储过程改为:
复制代码 代码如下:
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表