目录
1.1 创建存储过程的语法:
(1)创建存储过程
CREATE PROCEDURE 存储过程名([参数[,...]])存储过程体
语法说明如下。
存储过程名:存储过程的名称默认在当前数据库中创建。需要在特定数据库中创建存储过程时,要在名称前面加上数据库的名称,格式为数据库名.存储过程名。值得注意的是,这个名称应当尽量避免与MySQL的内置丽数名称相同,否则会发生错误。
(2)修改结束符号
我们可以使用EDELIMITER命令将MySQL语句的结束标识修改为其他符号。
语法如下:
DELIMITER $$
语法说明如下。
$$是用户定义的结束符、通常这个符号可以是一些特殊的符号,如两个“#”、两个"¥"等。当使用DELIMITER命令时,应该避免使用反斜杠(\)字符,因为那是MSOL的转字符。
我们还可以将它修改为 &&。
DELIMITER &&;
下面我们用一个例子来表示这段语句:编写一个存储过程,实现功能是删除一个指定用户姓名的用户信息。
DELIMITER &&
CREATE PROCEDURE del_member(IN xm CHAR(8))
BEGINN
DELETE FROM members where 姓名=xm;
END &&
DELIMITER;
1.2 存储过程体
(1)局部变量
在存储过程中可以声局部变量,它们可以用来存储临时结果。要声明局部变量,必须使用DECLARE语句。在声明局变量的同时,也可以对其赋一个初始值。
语法如下:
DECLARE 变量[,...]类型[DEFAULT 值]
DEFAULT 子句给变量指定一个默认值,如果不指定,默认为NULL。
例如,声明一个整形变量和两个字符变量。
DECLARE num int(4);
DECLARE str1,str2 varchar(6);
(2)SELECT-INTO 语句
使用SELECT-INTO语句可以把选定在列表直接存储到变量中,但返回在结果只有一行。
语法如下:
SELECT 列名[,...]INTO 变量名[,..] 数据来源表达式
语法说明如下:
列名[,...]变量名:将选定的列值赋给变量名。
数据来源表达式:SELECT语句中在FROM子句及后面的部分。
2.显示存储过程
想要查看里面有哪些存储过程,可以使用SHOW PROCEDURE STATUS 语句。
SHOW RPOCEDURE STATUS;
想要查看存储过程的具体信息,可以使用SHOW CREATE PROCEDURE 存储过程名语句。
SHOW CREATE PROCEDURE 存储过程名;
下面我们用一个例子来表示这段语句:查看刚刚创建的存储过程del_member的语句。
SHOW CREATE PROCEDURE del_member;
3.调用存储过程
当我们创建完存储过程便可以使用调用语句来实现我们想要的数据。
语法如下:
CALL 存储过程名(参数[,...])
例如:调用del_member存储过程,删除"张三"的用户信息。
CALL del_member('张三');
例子:创建存储过程,实现査询 members 表中会员人数的功能,并执行它。
首先创建查询 members 表中会员人数的存储过程。
CREATE PROCEDURE query_members()
SELECT COUNT(*) FROM members;
这是一个不带参数的非常简单的存储过程,通常SELECT语句不会被直接用在存储过程中。
调用该存储过程。
CALL query_members();
例:创建一个存储过程,输入成绩,返回等级。
DELIMITER SS
CREATE PROCEDURE quarter(IN mon int,out name varchar(20))
BEGIN
CASE
WHEN mon in(1,2,3) THEN SET name ='春';
WHEN mon in(4,5,6) THEN SET name ='夏';
WHEN mon in(7,8,9) THEN SET name ='秋';
WHEN mon in(10,11,12) THEN SET name '冬';
ELSE SET name='输入错误';
END CASE;
END SS
DELIMITER;
调用该存储过程。
CALL quarter(7);
4.删除存储过程
存储过程创建后,需要删除使使用DROP PROECDURE语句。删除前还要确认改存储过程没有任何依赖关系,否则可能会导致其他与之关联的存储过程无法运行。
语法如下:
DROP PROCEDURE [IF EXISTS] 存储过程名
语法说明如下:
存储过程名:要删除的存储过程的名称。
IF EXISTS子句:是MySQL的扩展,如果程序或函数不存在,则改子句可以防止发生错误。
例如:删除存储过程del_member,使用语句如下。
DROP PROCEDURE IF EXISTS del_members;
1364

被折叠的 条评论
为什么被折叠?



