创建一个名为select_zl的存储过程,输入的学号查询姓名课程名和成绩。Mysql报错:Error Code: 1172. Result consisted of more than one row

皮皮在使用MySQL8.0和MySQLWorkbench时,尝试创建一个名为select_zl的存储过程来查询学生信息。初始代码因使用OUT参数和INTO语句导致多行结果错误。修改后,皮皮删除了这些部分,直接在SELECT语句中输出结果,成功解决了问题。
摘要由CSDN通过智能技术生成

题目:

创建一个名为select_zl的存储过程,根据输入的学号查询此生的姓名,所选课程名,成绩。调用此过程。(调用时用自己的学号)。

皮皮用的是MySQL8.0,运行环境是MySQL Workbench。

首先尝试运行了下面这段代码:

Delimiter  $$
CREATE PROCEDURE select_zl(
	IN xsno VARCHAR(20),
    OUT ysno VARCHAR(20),
	OUT xsname VARCHAR(20),
	OUT xcname VARCHAR(20),
	OUT xgrade INT
)
BEGIN
	SELECT student.sno,sname,cname,grade
    INTO ysno,xsname,xcname,xgrade
	FROM student
	INNER JOIN sc ON student.sno = sc.sno
	INNER JOIN course ON course.cno = sc.cno
	WHERE student.sno=xsno;
END;  $$
CALL select_zl('200518',@x41,@x42,@x43,@x44);
SELECT @x41 学号,@x42 姓名,@x43 课程名,@x44 成绩;

但是报错:Error Code: 1172. Result consisted of more than one row

查询报错原因,得到的解释是有多个输出值。

于是皮皮尝试实现存储过程遍历输出,并未成功。

随后皮皮看了一下老师发的PPT,

比较之后,发现存储过程是可以直接SELECT出结果的,

所以只要删除OUT语句和INTO语句就可以了,正确运行的代码如下:

DROP PROCEDURE IF EXISTS select_zl;
Delimiter  $$
CREATE PROCEDURE select_zl(IN xsno VARCHAR(20))
BEGIN
	SELECT student.sno 学号,sname 姓名,cname 课程名,grade 成绩
	FROM student
	INNER JOIN sc ON student.sno = sc.sno
	INNER JOIN course ON course.cno = sc.cno
	WHERE student.sno=xsno;
END;  $$
CALL select_zl('200518');

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值