mysql24_MySql学习2

-- 3.1 带有输入参数的存储过程

-- 需求: 传入员工id查询对应的员工

DELIMITER $

CREATE PROCEDURE pro_testByIn(IN eid INT)  -- 参数类型(IN) 参数名称 数据类型(int)

BEGIN

SELECT * FROM employee WHERE id=eid;

END $

-- 调用

CALL pro_testByIn(2);

-- 3.2 带有输出参数的存储过程

DELIMITER $

CREATE PROCEDURE pro_testByOut(OUT n VARCHAR(20))

BEGIN

-- 修改变量n

SET n = '输出参数';

END $

-- 问题: 如何接收存储过程的输出参数???

-- 定义变量去接收输出参数数据。

-- mysql数据库三种变量:

-- 1)全局变量。mysql内置的变量,mysql程序关闭的时候全局变量才会失效!!

-- show variables:产看全局变量

-- character_set_client: mysql接收的客户端的数据编码

-- character_set_results:mysql使用什么编码输出给客户端数据

-- 查看某个全局变量:select @@变量名

-- 修改某个全局变量:set @@变量名=值

-- 案例:使用黑dos窗口客户端测试插入和查询表数据因为编码问题产生的乱码现象

-- 2) 会话变量。变量只在某次登录的会话中有效!退出连接,会话变量数据失效!!

-- 查看某个会话变量:select @变量名

-- 修改/定义某个会话变量:set @变量名=值

-- 案例:演示查询和更改会话变量

-- 3) 局部变量:在存储过程中定义的变量。存储过程结束局部变量失效!!

-- 查看某个局部变量:select变量名

-- 修改某个局部变量:set变量名=值

-- 定义某个局部变量:declare变量名 数据类型;

-- 定义会话变量去接收输出参数数据

-- set @n='eric';

CALL pro_testByOut(@n);

-- 查看会话变量n

SELECT @n;

-- 3.3 带有输入输出参数的存储过程

DELIMITER $

CREATE PROCEDURE pro_testByInOut(INOUT n VARCHAR(20))

BEGIN

-- 查看n变量

SELECT n;

-- 修改n变量

SET n = '500';

END $

-- 定义会话变量调用存储过程

SET @n='100';

CALL pro_testByInOut(@n);

-- 查看n

SELECT @n;

-- 3.4 带有判断条件的存储过程

-- 需求: 输入一个num整数,num=1 ,输出‘星期一’,num=2,输出‘星期二’,num=3,输出‘星期三’,否则,输出‘错误参数’

DELIMITER $

CREATE PROCEDURE pro_testByIf(IN num INT,OUT str VARCHAR(20))

BEGIN

IF num=1 THEN

SET str = '星期一';

ELSEIF num= 2 THEN

SET str ='星期二';

ELSEIF num=3 THEN

SET str = '星期三';

ELSE

SET str = '错误参数';

END IF;

END $

CALL pro_testByIf(5,@str);

SELECT @str;

-- 3.5 带有循环条件的存储过程

-- 需求: 输入一个num,计算从1到num的总和。

DELIMITER $

CREATE PROCEDURE pro_testByWhile(IN num INT,OUT score INT)

BEGIN

-- int result =0;

-- for(int i=1;i<=100;i++){

-- result += i;

-- }

-- 定义局部变量

DECLARE i INT DEFAULT 1;

DECLARE result INT DEFAULT 0;

WHILE i<=num DO

SET result = result + i;

SET i = i+1;

END WHILE;

SET score = result;

END $

CALL pro_testByWhile(200,@score);

SELECT @score;

-- 3.6 携带数据库的数据给输出参数(INTO)

-- 需求: 传入员工id,查询对应的员工,输出员工姓名

DELIMITER $

CREATE PROCEDURE pro_testByData(IN eid INT,OUT sname VARCHAR(20))

BEGIN

SELECT NAME INTO sname FROM employee WHERE id=eid;

END $

CALL pro_testByData(2,@sname);

SELECT @sname;ss

-- 练习

存储过程练习

在student表的数据基础上,设计一个存储过程:

1)计算出所有学生的英语平均分

2)

如果平均分,大于80分,且小于等于100分,输出'优秀'

如果平均分,大于等于60分,且小于等于80分,输出'良好'

如果平均分,小于60分,输出'不及格'

USE day14;

SELECT * FROM student2;

DELIMITER $

CREATE PROCEDURE pro_testByAvg(OUT str VARCHAR(20),OUT tavg FLOAT)

BEGIN

DECLARE savg FLOAT DEFAULT 0.0;

SELECT AVG(english) INTO savg FROM student2;

IF savg>80 AND savg<=100 THEN

SET str = '优秀';

ELSEIF savg>=60 AND savg<=80 THEN

SET str = '良好';

ELSE

SET str = '不及格';

END IF;

SET tavg = savg;

END $

-- 删除存储过程

DROP PROCEDURE pro_testByAvg;

CALL pro_testByAvg(@str,@tavg);

SELECT  @str;

SELECT @tavg;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值