MYSQL 存储过程(创建和调用,in、out和inout模式)

it2023-04-05  102

存储过程

含义: 一组预先编译好的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 存储过程名;

四、修改

存储过程里的逻辑语句不能修改

最新回复(0)