🎊 存储过程(无参,IN多个输入参数,OUT多个输出参数,INOUT输入输出)

存储过程(无参,IN多个输入参数,OUT多个输出参数,INOUT输入输出)

存储过程(无参,多个输入参数,多个输出参数)

存储过程:

1、减少编译次数

2、简化操作

3、减少了变异次数减少了和数据库的链接次数,提高效率

关于存储过程的方法:

1、删除存储过程

DROP PROCEDURE 存储过程的名称;

2、查看存储过程信息

SHOW CREATE PROCEDURE 存储过程名称;

3、没有存储过程的修改

创建语法:

CREATE PROCEDURE 存储过程名称(参数列表)

BEGIN

方法体(存储过程体)一组方法语句;

END

⭐⭐⭐⭐注意:参数列表包括三部分

1、参数模式 参数名 参数类型

eg: IN stuname varchar(20)

参数模式

IN : 该参数可以作为输入,也就是需要调用方传入值

OUT: 该参数作为输出,也就是该参数可以作为返回值

INOUT: 既可以作为输入参数,也可以作为输出参数

2、如果存储过程提仅仅只有一句话,那么BEGIN END 可以省略

3、存储过程中的每一条sql语句的结尾都必须加封号,需要申明结尾符号 DELIMITER 重新设置

以下在创建的过程中使用DELIMITER $开始,DELIMITER ;结束,是因为mysql是以;结束的,此处创建存储过程的时候需要指定结尾符号为$,整个存储过程执行完成后,再还原为mysql的结束符;即可

一、空参存储过程

DELIMITER $

CREATE PROCEDURE test1()

BEGIN

INSERT INTO admin(username,`password`) VALUES ('JOHN1','000001');

INSERT INTO admin(username,`password`) VALUES ('JOHN2','000002');

INSERT INTO admin(username,`password`) VALUES ('JOHN3','000003');

INSERT INTO admin(username,`password`) VALUES ('JOHN4','000004');

INSERT INTO admin(username,`password`) VALUES ('JOHN5','000005');

END $

DELIMITER ;

调用:CALL test1();

二、入参存储过程(此处直接举例有多个入参的存储过程的写法)

# 示例,查询是否登陆成功

DELIMITER $

CREATE PROCEDURE testParams(IN username varchar(20),IN password varchar(20))

BEGIN

-- 申明并初始化

DECLARE RESULT VARCHAR(20) DEFAULT '';

-- 赋值将统计到的count(1) 赋值给RESULT结果

select COUNT(1) INTO RESULT

from admin

-- 如果参数名相同的话指明参数是那个表的字段即可

where admin.username=username

and admin.password=password;

END $

DELIMITER ;

调用:call testParams('11','22');

三、多个出参的存储过程(此处直接举例有多个出餐的存储过程的写法)

#根据女神名,查询男神名和魅力值

DELIMITER $

CREATE PROCEDURE myp7(IN beautyName varchar(20),OUT boyName VARCHAR(20),OUT userCP varchar(20))

BEGIN

-- 此处赋值的时候多个直接INTO为对应位置的出参对象即可

SELECT bo.boyName,bo.userCP INTO boyName,userCP

FROM boys bo

INNER JOIN beauty b on bo.id=b.boyfriend_id

WHERE

b.name=beautyName;

END $

DELIMITER ;

调用:

CALL myp7('小昭',@boyName,@userCP);

#此处存储过程的两个入参(也即出参)用@符号定义即可,也可以先定义好传入到里面

SELECT @boyName AS boyName,@userCP as userCP #查询存储过程运行的结果

四、创建带有INOUT的存储过程

#案例 传入a,b 最终a,b翻倍,并返回

DELIMITER $

CREATE PROCEDURE ccgc(INOUT a int,INOUT b int)

BEGIN

SET a=a*2;

SET b=b*2;

END $

DELIMITER ;

调用:

###此处需要提前定义参数值,类似于java的入参,

SET @m=10;

SET @n=30;

call ccgc(@m,@n);

#然后调用,并打印输出

select @m,@n

🎈 相关推荐

鱼多久喂一次,怎么喂鱼
🏷️ 中爱365APP

鱼多久喂一次,怎么喂鱼

📅 09-13 👀 6986
1英里等于多少公里 英制长度单位里的里和英里有什么区别?
怎样用七巧板拼兔子
🏷️ 365dni是什么

怎样用七巧板拼兔子

📅 08-30 👀 2758
更改 Siri 的声音或语言
🏷️ 365dni是什么

更改 Siri 的声音或语言

📅 08-10 👀 9834
治白点病有哪家医院效果比较好
🏷️ 365dni是什么

治白点病有哪家医院效果比较好

📅 08-11 👀 1633
分期乐为什么是深圳发货
🏷️ 谁有365bet网址

分期乐为什么是深圳发货

📅 07-04 👀 9164