mysql 存储过程 create procedure 名(参数模式 名 类型)

11、存储过程

11.1 存储过程的格式

CREATE PROCEDURE p1()
BEGIN

END

格式:
	CREATE PROCEDURE 存储过程名(参数列表)
	BEGIN
	
		存储过程体(合法有效的SQL语句)
	END 

注意点:
	1、参数列表 包含3个部分 参数模式  参数名  参数类型 ( IN username VARCHAR(20))
		参数模式(作用)
			IN 表示该参数作为输入,该参数调用的时候传入值
			OUT 该参数作为输出,就是返回值
			INOUT 既可以当做输入,又可以当做输出,表示的需要传入,也可以输出
			
	2、BEGIN  END ,如果存储过程只有一条语句,可以省略
	
	3、关于结束符
		存储过程体的每一条SQL语句都需要是合法有效的,一定要加;
		存储过程的结尾需要重新声明结束符
		DELIMITER 结束符
		
	4、调用的时候,需要CALL 存储过程名()
	  		
	  		

11.2 关于存储过程中参数的问题

11.2.1 参数可以为空值

DELIMITER $   
CREATE PROCEDURE p1()
BEGIN

INSERT INTO brand(brandename) 
VALUES('lv'),
      ('哇哈哈'),
      ('雪碧'),
      ('coco');
END$

注意点:
当前存储过程中,没有参数

11.2.2 参数模式为in—单个参数

#根据传入的brande_id查找对应的品牌的名字
CREATE PROCEDURE p2(IN brandeid INT)
BEGIN

SELECT * FROM brand WHERE brand.id=brandeid;

END$

CALL p2(2)

注意点:
1、参数模式   参数名  参数的数据类型
2、调用的过程中,call 存储过程的名字(填写参数)

11.2.3 参数模式为in—多个参数

请利用存储过程,存储多个品牌
CREATE PROCEDURE p3(IN b1 VARCHAR(10),IN b2 VARCHAR(10))
BEGIN

INSERT INTO brand VALUES(0,b1),(0,b2);
END$

CALL p3('百事可乐','可口可乐')

注意点:
1、如果存在多个数据,用','隔开
2、注意调用过程中的参数个数
# 请根据用户传入的用户名和密码,检查登录状态(成功,失败)
DELIMITER $
CREATE PROCEDURE p4(IN username VARCHAR(20),IN upassword VARCHAR(20))
BEGIN

# 声明一个自定义的变量
DECLARE result INT DEFAULT 0;

SELECT COUNT(*) INTO result
FROM userinfo 
WHERE userinfo.`name`=username 
AND userinfo.`password`=upassword;

# if 语句的使用
SELECT IF(result>0,'成功','失败');

END$

CALL p4('二毛','22')

注意点:
1、声明一个自定义的变量
	declare 变量名 数据类型

11.2.4 参数out

根据品牌的名称,返回商品的名称
DELIMITER $
CREATE PROCEDURE p5(IN brandname VARCHAR(20),OUT goodsname VARCHAR(20))
BEGIN

SELECT 
goods.`name` INTO goodsname 
FROM goods INNER JOIN brand 
ON goods.`brande_id`=brand.`id`
WHERE brand.`brandename`=brandname;

END

CALL p5('大润发',@bname)
SELECT @bname

11.2.5 参数inout

INOUT
传入两个数据,将数据翻倍输出
DELIMITER $
CREATE PROCEDURE newp8(INOUT a INT,INOUT b INT)
BEGIN
	SET a = a*2;
	SET b = b*2;


END$

SET @m=1$
SET @n=2$
SELECT @m
SELECT @n
CALL newp8(@m,@n)

`

11.3查看和删除存储过程

查看:show create procedure 存储名;
删除:drop procedure 存储名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南桥经不起秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值