SQL删除存储过程执行失败问题排查求助
问题代码错误点
- 语法混用了SQL Server和MySQL的规则:你使用
Delimiter关键字说明运行环境是MySQL,但存储过程参数用@row、加AS关键字都是SQL Server的语法,MySQL不支持。MySQL的存储过程参数需要明确指定IN/OUT/INOUT属性,不需要@前缀,且参数列表必须包裹在括号内。 - DELETE关键字拼写错误:写了
DELETE FORM,正确写法是DELETE FROM。 - 存储过程结束标识缺失:修改分隔符为
//后,存储过程的END后需要加//标识结束,再改回默认分隔符。 - 潜在类型匹配问题:如果你的
row_names字段是数值类型,传入字符串'11'可能出现隐式转换问题,建议参数类型和字段类型保持一致。
修正后的完整代码
-- 修改分隔符 Delimiter // CREATE PROCEDURE BIRD_STRIKE_INCIDENT_DELETE (IN p_row TEXT) BEGIN DELETE FROM bird_strike.incidents WHERE row_names = p_row; END // -- 改回默认分隔符 delimiter ; -- 调用存储过程 Call BIRD_STRIKE_INCIDENT_DELETE('11');
补充说明
- 参数名加
p_前缀是为了和字段名区分,避免出现字段名和参数名重名导致的逻辑错误,你也可以保留原参数名只要不和字段冲突即可。 - 如果
row_names是INT类型,建议把参数类型改为INT,调用时直接传11即可,不需要加引号。
内容的提问来源于stack exchange,提问作者chill_life_123
相关产品推荐
相关产品推荐

