create procedure proc_4(in uname varchar(20),out uscore int) begin select score into uscore from user where uname=uname; end; set @uscore=0; call proc_4('平平人生',@uscore); select @uscore;这个语句实现查询平平人生的score,有什么错误吗
时间: 2024-02-01 09:02:37 浏览: 86
在存储过程中,变量名 `uname` 与参数名 `uname` 重复了,可能会导致语法错误或者逻辑错误。
以下是修改后的存储过程代码:
```
CREATE PROCEDURE proc_4(IN p_uname VARCHAR(20), OUT p_uscore INT)
BEGIN
SELECT score INTO p_uscore FROM user WHERE uname = p_uname;
END;
```
在调用存储过程时,需要使用修改后的参数名 `p_uname` 和 `p_uscore`,如下所示:
```
SET @uscore = 0;
CALL proc_4('平平人生', @uscore);
SELECT @uscore;
```
另外,在存储过程中,如果查询语句返回多行结果,则需要使用 `LIMIT` 关键字来限制结果集只返回一行结果,从而避免 "Result consisted of more than one row" 的错误。
相关问题
简单说明以下数据库代码的需求分析create database 学生选课; use 学生选课; source C:\Users\Administrator\Desktop\xuexi.sql show tables; select * from student; set @c1=1,@c2=2,@c3=3; select @c1,@c2,@c3; delimiter // create function fn1() returns datetime reads sql data begin return now(); end// select fn1() as 当前时间// select now()// delimiter // create function fn2(a int,b int) returns int reads sql data begin return a+b; end// select fn2(321,123)// select fn2(9876,3546)// show create function fn1\G drop function fn1// create procedure proc1() begin declare a int default 100; set a=a+50; select a; end// call proc1()// delimiter // create procedure aaa() begin declare v varchar(5); set v='你好'; if v is null then select '是空值'; else select '不是空值'; end if; end// call aaa()// delimiter // create procedure bbb() begin declare v int; set v=100; case v when 1 then select'值是1'; when 2 then select'值是2'; else select '值不是1也不是2'; end case; end // call bbb()// delimiter // create procedure xunhuan() begin declare pl int default 0; my_loop:loop set pl=pl+1; select '你真好看'; if pl>10 then leave my_loop; end if; end loop my_loop; end// call xunhuan()// delimiter // create procedure p_student () begin select *from student; end// call p_student()// desc student// delimiter // create procedure p_student2(dept varchar(8)) begin select * from student where sdept=dept; end// call p_student2('云计算技术')// call p_student2('人工智能系')// call p_student2('大数据技术')// delimiter // create procedure p_student3(sex char(2), out renshu int) begin if sex='男' then select count(ssex) into renshu from student where ssex='男'; else select count(ssex) into renshu from student where ssex='女'; end if; end// call p_student3('男', @renshu)// select @renshu // call p_student3('女', @renshu)// select @renshu// show create procedure p student2\G drop procedure p student2// create database 网上书店数据库; use 网上书店数据库; source C:\Users\Administrator\Desktop\online bookstore.sql show tables; select * from user; delimiter // create procedure proc_1() begin select * from user; end// call proc_1()// delimiter // create procedure proc_2(昵称 varchar(20),out 积分 int) begin select score into 积分 from user where uname=昵称; end// call proc_2( 平平人生,@积分)// select @积分// call proc_2(感动心灵’,@积分)// select @积分//
这段代码是对学生选课数据库进行操作的需求分析,具体包括:
1. 创建数据库学生选课;
2. 使用学生选课数据库;
3. 导入一个名为xuexi.sql的SQL文件;
4. 显示数据库中的表;
5. 查询学生表中的所有信息;
6. 设置三个变量,并查询它们的值;
7. 创建一个返回当前时间的函数fn1();
8. 查询fn1()函数返回的当前时间;
9. 创建一个计算两个整数之和的函数fn2();
10. 分别查询fn2(321,123)和fn2(9876,3546)的返回值;
11. 显示fn1()函数的创建语句;
12. 删除函数fn1();
13. 创建一个名为proc1()的存储过程,该存储过程将一个整数变量加50后输出;
14. 调用proc1()存储过程;
15. 创建一个名为aaa()的存储过程,判断一个字符串变量是否为空值;
16. 调用aaa()存储过程;
17. 创建一个名为bbb()的存储过程,根据一个整数变量的值输出不同的内容;
18. 调用bbb()存储过程;
19. 创建一个名为xunhuan()的存储过程,使用循环输出一句话;
20. 调用xunhuan()存储过程;
21. 创建一个名为p_student()的存储过程,查询学生表中的所有信息;
22. 调用p_student()存储过程;
23. 显示学生表的结构;
24. 创建一个名为p_student2()的存储过程,根据系别查询学生表中的信息;
25. 分别调用p_student2()存储过程并输入不同的参数;
26. 显示p_student2()存储过程的创建语句;
27. 删除p_student2()存储过程;
28. 创建一个名为网上书店数据库的数据库;
29. 使用网上书店数据库;
30. 导入一个名为online bookstore.sql的SQL文件;
31. 显示数据库中的表;
32. 查询用户表中的所有信息;
33. 创建一个名为proc_1()的存储过程,查询用户表中的所有信息;
34. 调用proc_1()存储过程;
35. 创建一个名为proc_2()的存储过程,根据昵称查询用户表中的积分信息;
36. 分别调用proc_2()存储过程并输入不同的参数;
37. 显示用户表的结构。
阅读全文