隐藏在存储过程、自定义函数输入参数中的一个“暗坑”

     总结血的教训:输入参数名和程序体中涉及的表字段名“千万不要重名”,如下:

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,'''') ;

你可能感兴趣的:(隐藏在存储过程、自定义函数输入参数中的一个“暗坑”)