我使用以下代码创建了一个存储过程;
DELIMITER //
CREATE PROCEDURE DeleteCandidate(IN `vid` integer, IN `aid` integer)
BEGIN
DELETE FROM `app_appointment` WHERE `vid` = vid and `aid` = aid;
DELETE FROM `app_declare` WHERE `vid` = vid and `aid` = aid;
END //
DELIMITER ;
当我调用过程Call DeleteCandidate(1, 1547)
时,它不会删除where vid = vid
和aid = aid
,而是删除表中的所有数据。
有人能帮我解释一下为什么会发生这种事。当我在dbForge Studio中调试时,它显示aid = 1547和vid = 1的值。
非常感谢
2条答案
按热度按时间zlhcx6iw1#
为变量使用不同的名称。否则,数据库认为您将列内容与其自身进行比较(而不是将列与变量进行比较),这总是正确的
dy1byipe2#
目前,在实际的dbForge Studio for MySQL版本中,这两个选项都是可以接受的(在信体和答案中)。如果调用DeleteCandidate(1,1547)的变量与表内容匹配,则会正确执行该调用。