在测试环境中,我创建了以下过程:-
CREATE DEFINER=`SC1`@`%` PROCEDURE `sc1_procedure_wipe_perms`(IN UserUUID char(36))
BEGIN
DELETE FROM subAccountPermissions WHERE `UserUUID` = UserUUID;
END
足够纯真的吧? 我从Java调用它的方式如下:-
connection = ConnectionMgr.getConnectionToSc1();
rmStatement = connection.prepareStatement("CALL sc1_procedure_wipe_perms(?)");
rmStatement.setString(1, UserUUID);
rmStatement.execute();
它将删除所有内容。我不确定这是怎么回事?
答案 0 :(得分:2)
问题在于过程参数UserUUID
与表列UserUUID
之间的歧义。 MySQL编译器将忽略该参数,并在条件的两边使用table列,这意味着它将对所有行解析为true
。
您需要消除名称的歧义,并为过程参数使用其他名称,例如UserUUIDToDelete
。