MySQL存储过程如何传递参数?参数与字段重名导致全表查询问题求助
问题原因
你编写的存储过程出现全表返回的核心原因是输入参数名与表字段名完全重名,MySQL解析WHERE Name = name条件时,会将左右两侧的标识符均识别为Students表的Name字段,等价于1=1的恒真条件,因此会返回所有行的Class字段值。
解决方案
有两种常用的修正方式,任选其一即可:
方案1:修改输入参数名,避免与字段重名
将输入参数改为不会和表字段冲突的名称,修正后的代码如下:
CREATE PROCEDURE LocateT2(IN in_stu_name varchar(100)) BEGIN SELECT Class FROM Students WHERE Name = in_stu_name; END$
方案2:为表字段增加表名限定符
保留原有参数名,在条件中明确指定字段所属的表,修正后的代码如下:
CREATE PROCEDURE LocateT2(IN name varchar(100)) BEGIN SELECT Class FROM Students WHERE Students.Name = name; END$
修正后重新创建存储过程,执行call LocateT2("Sasuke Uchiha")即可正常返回目标学生的X-B班级结果。
内容的提问来源于stack exchange,提问作者Saptarshi Dey
相关产品推荐
相关产品推荐

