MYSQL存储过程中的DELETE FROM

xqk2d5yq  于 2023-05-21  发布在  Mysql
关注(0)|答案(2)|浏览(196)

我使用以下代码创建了一个存储过程;

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 = vidaid = aid,而是删除表中的所有数据。
有人能帮我解释一下为什么会发生这种事。当我在dbForge Studio中调试时,它显示aid = 1547和vid = 1的值。
非常感谢

zlhcx6iw

zlhcx6iw1#

为变量使用不同的名称。否则,数据库认为您将列内容与其自身进行比较(而不是将列与变量进行比较),这总是正确的

DELIMITER //
CREATE PROCEDURE DeleteCandidate(IN `vidparam` integer, IN `aidparam` integer)
  BEGIN
    DELETE FROM `app_appointment` WHERE `vid` = vidparam and `aid` = aidparam;
    DELETE FROM `app_declare` WHERE `vid` = vidparam and `aid` = aidparam;
  END //
DELIMITER ;
dy1byipe

dy1byipe2#

目前,在实际的dbForge Studio for MySQL版本中,这两个选项都是可以接受的(在信体和答案中)。如果调用DeleteCandidate(1,1547)的变量与表内容匹配,则会正确执行该调用。

相关问题