MySQL存储过程
存储过程和函数都是事先预编译并保存在数据库中的特殊数据库对象,当需要时可以直接通过“存储过程名”或“函数名”调用执行,这样可以简化操作,同时提高执行的效率。
一、存储过程和函数的区别:
- 函数是在定义部分有RETURNS指定返回值类型,同时在函数体中必须使用RETURN语句返回结果;存储过程则通过输出或输入输出参数向外输出结果。
- 存储过程的参数有IN、OUT、INOUT作为指定参数的传递方向;而函数的参数通常是IN的方向,所以我们就省略不写。
- 函数可以包含在任意SQL语句中;而存储过程不行,是通过CALL语句来调用。
二、自定义函数:(了解一下)
语法:
DELIMITER $$
CREATE FUNCTION <函数名> (参数名称 参数数据类型(长度,小数点位数))RETURNS 返回值的数据类型
BEGIN
#函数的内容
END $$
DELIMITER ;
说明:
- DELEMITER叫做定界符,表示将原来语句结束的符号改为“//”或者“$$”函数结束后再将符号改回“;”
- 函数分为定义部分和函数体;
- 函数在定义部分有RETURNS指定返回值类型,同时在函数体中必须使用RETURN语句返回结果。
举例:
#1.创建一个定义的函数:问好的函数,可以从外界传入一个名字,最后实现输出“您好XXX”
DELIMITER $$
CREATE FUNCTION func_hrllo(name VARCHAR(10)) RETURNS VARCHAR(20)
BEGIN
RETURN CONCAT('您好:',name);
END $$
DELIMITER ;
#2.调用以上的自定义函数
SELECT func_hrllo('张三');
三、存储过程:
语法:
DELIMITER //
CREATE PROCEDURE 存储过程名(参数的传递方向 参数的名称 参数的数据类型)
BEGIN
#存储过程体的内容部分
END //
DELIMITER ;
说明:
1)参数传递方向:IN(输入)、OUT(输出)、INOUT(输入输出)。
2)存储过程则通过输出或输入输出参数向外输出结果。
1.存储过程的入门案例:
- 存储过程的入门案例:满足条件的记录数统计:针对成绩表*/
#1) 创建存储过程
DELIMITER //
CREATE PROCEDURE proc_score_count(OUT result INT(3))
BEGIN
SELECT COUNT