存儲過程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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM