存储过程WHERE条件不生效

业务上有个删除操作需要涉及到几张表,一条一条操作很麻烦,所以想写个存储过程来封装下,原始语句如下:

DELETE FROM AUTH_AUTHORITY WHERE `ID` in ('f_view_access');
DELETE FROM AUTH_ROLE_AUTHORITY WHERE AUTHORITY_ID in ('f_view_access');

存储过程如下:

DROP PROCEDURE IF EXISTS delete_authority;
DELIMITER $$
CREATE PROCEDURE delete_authority(IN authority_id CHAR(30)) 
BEGIN
	DELETE FROM AUTH_AUTHORITY WHERE `ID` = authority_id;
	DELETE FROM AUTH_ROLE_AUTHORITY WHERE `AUTHORITY_ID` = authority_id;	
END $$
DELIMITER ;
CALL delete_authority('f_view_access');
DROP PROCEDURE IF EXISTS delete_authority;

执行后发现AUTH_ROLE_AUTHORITY表的数据全部被删除了,即WHERE条件不生效

经过排查确认是变量(authority_id)命名的问题,总结起来就是:存储过程DELETE语句中where条件后的变量名不能和字段名相同,不区分大小写的!其他SELECT、UPDATE、INSERT同理,坑爹。。。

修改变量名后的存储过程如下,执行符合预期:

DROP PROCEDURE IF EXISTS delete_authority;
DELIMITER $$
CREATE PROCEDURE delete_authority(IN authority CHAR(30)) 
BEGIN
	DELETE FROM AUTH_AUTHORITY WHERE `ID` = authority;
	DELETE FROM AUTH_ROLE_AUTHORITY WHERE `AUTHORITY_ID` = authority;	
END $$
DELIMITER ;
CALL delete_authority('f_view_access');
DROP PROCEDURE IF EXISTS delete_authority;
posted @   尽在云中  阅读(921)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示