总结血的教训:输入参数名和程序体中涉及的表字段名“千万不要重名”,如下:
create procedure sp_test(...,in p1 varchar(20),...)
begin
......
select aa into bb from table1 where p1 = '111' ;
......
end ;
以上输入参数中有一个p1,程序体中使用到的表有一个字段也叫p1,此时可能正常执行,也可以能无法执行以上select语句,总之会出现一些莫名其妙的古怪错误,很耽误查错时间。
为避免以上暗坑,有两个解决办法:
1、输入参数改名,确保不要和用到的表字段名重名,如以上输入参数p1修改为p11。
2、程序体中的涉及到重名字段的语句用动态语句,如
set sql = concat('select aa into bb from table1 where p1 = ''',p1,'''') ;
网友评论