MYSQL 存储过程(创建和调用,in、out和inout模式)
·
存储过程
含义: 一组预先编译好的SQL语句的集合,可理解成批处理语句,类似于JAVA中的方法。
使用时直接调用名字就可以
好处: 1. 提高代码的重用性;2.简化操作;3.减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率。
语法
一、创建和调用
## 一)创建语法
create Procedure 存储过程名(参数列表)
Begin
存储过程体(一组合法的SQL语句)
End
## 二)调用语法
call 存储过程名(实参列表);
注意:
- 参数列表包含三部分: 参数模式+参数名+参数类型
in stuname VARCHAR(20)
其中参数模式:
- IN: 该参数可作为输入。 即该参数需要调用方传入值
- OUT : 该参数可作为输出,该参数可以作为返回值
- INOUT:该参数可作为输出,也可以作为输出; 即该参数既需要传入值,又可以返回值
- 如果存储过程体仅仅只有一句话,BEGIN END可以省略。
- 存储过程体中的每条SQL语句结尾要修必须加分号。
存储过程体的结尾可以使用DELIMITER 重新设置。
语法:DELIMITER 结束标记
比如,DELIMITER $
1. 空参的存储过程
在终端里面下面输入代码。
#创建
DELIMITER $
create PROCEDURE myp1()
BEGIN
insert into 学生表(姓名,学号)
VALUES(A,004),(b,004),(,004);
END $
#调用
CAll myp1()$
注意! 当DELIMITER $
生效后,语句结尾要使用 $ 而不是分号;
完成后可以在函数这里看到myp1
2. 创建带in模式参数的存储过程
例子:输入课程名字,查询对应的教师信息
#创建
# DELIMITER $ 开头写过就不用再写一次了
create PROCEDURE myp2(in c_name VARCHAR(20))
BEGIN
select t.*
from teacher t
right join course c on t.t_id=c.t_id
where c.c_name=c_name;
END $
#调用
CAll myp2('这里输入对应的值')$
3. 创建带out模式参数的存储过程
例子:输入课程名字,返回对应的教师名字
#创建
# DELIMITER $
create PROCEDURE myp3(in c_name VARCHAR(20),out t_name VARCHAR(20))
BEGIN
select t.t_name into t_name #使用into赋值
from teacher t
right join course c on t.t_id=c.t_id
where c.c_name=c_name;
END $
#调用
CAll myp3('语文',@tname)$
select @tname$
结果展示:
4. 创建带inout模式参数的存储过程
传入a,b两个值,最后两个值翻倍返回
#创建
# DELIMITER $
create PROCEDURE myp4(inout a int, inout b int)
BEGIN
set a=a*2
set b=b*2;
END $
#调用
set @m=10$
set @n=20$
CAll myp4(@m,@n)$
select @m,@n$
二、删除语法
drop procedures 存储过程名;
注意只能一次删除一个
三、查看
show create procedure 存储过程名;
四、修改
存储过程里的逻辑语句不能修改
更多推荐
已为社区贡献14条内容
所有评论(0)