存储过程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 @ 2020-06-12 16:18  尽在云中  阅读(897)  评论(0编辑  收藏  举报